一.基础正则表达式
grep:分析一行信息,若其中有我们想要的信息,就将该行取出来
grep [-acinv] '搜索字符串' filename
-a:将二进制文件以文本文件的方式搜索数据
-c:计算找到搜索字符串的次数
-i:忽略大小写
-n:顺便输出行号
-v:反向选择,即显示出没有'搜索字符串'内容的那一行
例子:last | grep 'root'
例子:last | grep -v 'root'
last | grep 'root'| cut -d ' ' -f 1
例1.搜索特定字符串
从文件中取得'the'字符串
grep -n 'the' filename
当该行没有'the'就取出来
grep -nv 'the' filename
例2.利用[]搜索集合字符
[]中不论有几个字符都代表有一个字符
grep -n 'te[ae]st' filename
[^]是[]的反向选择
grep -n '[^g]oo' filename
例3.行首^和行尾$字符
查询以'the'开头的行
grep -n '^the' filename
查询以小写字母开头
grep -n '^[a-z]' filename
查询非字母开头的
grep -n '^[^a-zA-Z]' filename
找出空行
grep -n '^$' filename
略去空行和注释行
grep -v '^$' filename | grep -v '^#'
例4.任意一个字符.和重复字符*
grep -n 'g..d' filename :查找共有四个字符串,开始是g结束是d
grep -n '000*' filename :至少俩个00字符串
grep -n 'g00*g' filename :开头和结尾都是g,中间有一个以上o
grep -n 'g.*g' filename :开头和结尾都是g,中间可有可无
找出任意数字的行 grep -n '[0-9][0-9]*' filename
例5.限定连续重复字符范围
grep -n '0\{2\}' filename :找到两个0的字符串
grep -n 'go\{2,5\}g' filename :找到g后面有2~5个o,然后在接个g的字符串
grep -n 'go\{2,\}g' filename :找到两个以上的
二.扩展正则表达式
上面的一个例子可以这样:egrep -v '^$|^#' filename找出不是空白行和注释行
+:重复一个或者一个以上
?:0个或者1个
|:用或的方式找出字符串
():找出用户组字符串grep -n 'g(la|oo)d' filename
意思是搜索glad或者是good字符串
格式化显示:
printf '打印格式' 内容
\a:警告声音输出
\b:退格键
\f:清楚屏幕
\n:输出新的一行
\r:enter键
\t:水平的tab键
\v:垂直的tab键
\xNN:NN为两位数字,可以转化数字成为字符
%ns:n是数字,s是字符
%ni:即多少个整数数字
%N.nf:n与N都是数字,f表示浮点,有小数位数,假设要10位,小数点有两位即为%10.2f
数字45代表的是什么?
printf '\x45\n'
sed工具:
sed [-nefr] [动作]
参数:
-n :一般的sed用法中,所有的输入都会显示在屏幕上,,如果加上-n,则只有经过sed特殊处理的那一行才会列出来
-e:直接在命令行模式进行sed编辑
-f:直接将sed操作写在一个文件内,-f filename则可以执行filename内的sed操作
-r;sed的操作支持的扩展表达式的语法 ,默认的是基础正则表达式
操作说明:[n1,[n2]]funcation
a:新增,当前的下一行
s:替换
d:删除
i:插入当前的上一行
p:打印,通常和sed -n
s:搜索
例子:将2~5行删除:cat /etc/passwd | sed '2,5d'
在第二行后加上'drink tea' ;sed '2a drink tea'
在第二行后面加上两行字'drink tea or....' 'drink tea?'
[wuxiaoxiao@localhost linux]$ nl lean | sed '10a 1111111...\(按enter键)
> drink ?'
将第一行和第五行替换为"no 2-5 number"
sed '2,5c no 2-5 number'
仅显示第5-7行
sed -n '5,7p'
awk工具简介
awk '条件类型1{动作1} 条件类型2{动作2} ....' filename
last | awk '{print $1 "\t" $3}'
awk内置变量
NF 每一行($0)拥有的字段总数
NR 当前awk所处里的是第几行数据
FS 当前的分割符,默认的是空格键
last | awk '{print $1 "\t lines: " NR "\t columes: "NF}'
awk的逻辑运算
> < >= <= == !=
例子:/etc/passwd中是以冒号(:)来分割字段的,假设药查看第三栏小于10以下的数据,并且列出账号和第三栏
[wuxiaoxiao@localhost linux]$ cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'
root:x:0:0:root:/root:/bin/bash
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
news 9
第一行没有变化
[wuxiaoxiao@localhost linux]$ cat /etc/passwd | awk 'BEGIN{FS=":"} $3<10 {print $1 "\t" $3}'
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
news 9
阅读(988) | 评论(0) | 转发(0) |