Shell三剑客之grep、sed
一、grep
1、grep命令语法格式
grep [选项]... 匹配项 [文件]...
选项:
-E,--extended-regexp 模式是扩展正则表达式(ERE)
-i,--ignore-case 忽略大小写
-w,--word-regexp 模式匹配整个单词
-n,--line-number 打印行号
-v,--invert-match 打印不匹配的行
-B,--before-context=NUM 打印匹配的前几行
-A,--after-context=NUM 打印匹配的后几行
2、筛选报错日志用例
例:grep -in -A10 exception hadoop-root-datanode-hadoop01.log
使用grep来过滤出日志报错信息,使用-in
选项忽略大小写匹配并显示行号,使用-A
选项打印出匹配的后10行异常的完整信息
二、sed详解
1、命令格式
sed [选项] '操作' 参数
选项:
-r:使用扩展正则表达式
-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
-f:后跟保存了sed指令的文件
-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
操作:
a:增加,在当前行下面增加一行指定内容。
c:更改 更改匹配行的内容。
s:替换,替换指定字符
d:删除,删除选定的行。
i:插入,在选定行上面插入一行指定内容。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容,通常与“-n”选项一起使用。
y:字符转换
=:用来打印被匹配的行的行号
n:读取下一行,遇到n时会自动跳入下一行
r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件
2、‘操作’,规则速记技巧
sed [选项] '操作' sedFile.txt
操作可看成两步筛选行与行动目的
例:增加、删除、替换等操作
向第一行后插入hello,为
sed '1ahello' sedFile.txt
删除第一行,sed '1d' sedFile.txt
将第一行替换为hello sed,sed '1chello sed' sedFile.txt
前面的1
即为筛选条件,筛选第一行,当然也可以用正则表达式或者其它筛选行的方式,后半部分即是行动操作,增加、删除、替换等操作。
当我们简单了解到这些基本规则后,对于后面增删改查操作就简单多了。
3、打印文件指定行
sed -n '2p' sedFile.txt
打印文件第二行
sed -n '2,5p' sedFile.txt
打印文件2-5行
sed -n 'n;p' sedFile.txt
打印偶数行,也可以写成sed -n '2~2p' sedFile.txt
(波浪号后面表示步长,前面表示起始行),n表示直接跳到下一行,然后打印,直至结束即偶数行,如果’p;n’即表示先打印再跳行,即打印奇数行。
3.1、正则表达式匹配打印行
sed -n '/IPV/p' sedFile.txt
打印包含IPV的行,正则表达式需使用//
包括起来
4、增加操作
a表示在行后一行增加,i表示在行前增加
sed '1,2ahello' sedFile.txt
在第一行到第二行下一行增加hello
sed '/TYPE/ahello' sedFile.txt
在包含TYPE的后面一行增加hello
5、修改操作
c表示整行替换,s是匹配部分替换
sed 's/yes/no/' sedFile.txt
将所有yes替换成no
sed 's/.*"no"//' sedFile.txt
将所有以"no"结尾的替换成空行
sed 's/$/& 'easy'/' sedFile.txt
在每一行后面增加easy,其中&
代表匹配的内容,$
表示整行,也可以写成sed 's/.*/& 'easy'/' sedFile.txt
6、读写文件操作
sed -n '1,2w copysedFile.txt' sedFile.txt
将sedFile文件第一行第二行写入到copysedFile中
sed '1r sedFile.txt' copysedFile.txt
在copysedFile文件的第一行后面插入sedFile文件内容