一、egrep
1.1 定义
以行为单位,逐行进行处理。默认只输出与表达式相匹配的文本行
1.2 基本格式
egrep [选项] '正则表达式' 文件...
前置命令 | egrep [选项] '正则表达式'
1.3 常用命令选项
1.3.1 egrep -i
忽略大小写
1.3.2 egrep -v
条件取反
1.3.3 egrep -c
统计匹配的行数
egrep -c "." /etc/passwd#统计passwd有多少行
1.3.4 egrep -q
静默,不输出任何信息。可通过$?看结果是否正确
1.3.5 egrep -n
显示出匹配结果所在的行号
1.3.6 egrep -o
只输出匹配的内容,不是一行
1.3.7 egrep -A n key
输出匹配key关键字及关键字下面的n行
1.3.8 egrep -B n key
输出匹配key关键字及关键字上面的n行
1.3.9 egrep -C n key
输出匹配key关键字及关键字上下的n行
1.4 正则表达式
正则表达式使用一串特殊符号来描述有共同属性的的数据,一共有11个符号。
它相当于计算机世界里面的英语,即计算机里面的通用语言!
1.4.1 基本正则元字符
优点:兼容性强
缺点:书写麻烦
1.4.2 扩展正则元字符
优化基本正则、添加新的元字符。
优点:书写简单
缺点:兼容性差,grep就不支持
1.4.3 转义元字符
二、sed
2.1 概述
Stream EDitor,流式编辑器。
非交互,基于模式匹配过滤及修改文本。一行一行读取,逐行处理,并将结果输出到屏幕。可实现对文本的输出、删除、替换、复制、剪切、导入、导出等各种操作。
2.2 基本格式
sed [选项] '编辑指令' 文件
前置命令 | sed [选项] '编辑指令'
选项:n,r,i
编辑指令:[定址符]处理动作
定址符:[条件1[,条件2]]
条件:行号或者/正则/
处理动作:p,d,s,a,i,c,r,w,H,h,G,g
举例:
sed -n '/^root/p' /etc/passwd #打印passwd文件中以root开头行
2.3 选项
2.3.1 sed -n
屏蔽默认输出
2.3.2 sed -r
支持扩展正则表达式,若与其他选项共用,必须作为首个选项
2.3.3 sed -i
对源文件进行实际操作
2.3.4 sed -e '' -e '' -e '' a.txt
同时对a.txt做三个操作
2.4 处理动作
2.4.1 p
打印
sed '3,5p' a.txt
打印a.txt的第3行,第5行
2.4.2 d
删除
2.4.3 s
替换关键字
2.4.4 a
在行号下面插入新的一行,如果行号为2,那么插入的行就是第3行
还可以插入多行,行之间用"\"连接
sed -i '1askip-networking' /etc/my.cnf#在第一行后面插入新行,内容为skip-networking
2.4.5 i
替换行号所在的一行,原来的行变成下一行,如果行号为2,那么插入的行就变成了第2行,原来的行变成了第3行
2.4.6 c
整行替换
sec '1c string' #把第一行替换为string
2.4.7 r
sed 3r c.txt
读取c.txt文件,把内容插入第3行之后
2.4.8 w
sed 1,3w c.txt#把1-3行另存为c.txt文件
sed 'w a.txt' c.txt#全文复制c.txt的内容到a.txt
2.4.9 H h G g
sed复制粘贴功能
模式空间:存放当前处理的行,将处理结果输出。若当前行不符合处理条件,则原样输出。处理完当前行之后再读入下一行
保持空间:作用类似于粘贴板,默认存放一个空行(\n)
H命令的功能:拷贝模式空间的内容,追加粘贴到保持空间。保持空间里面的空行不会被覆盖
h命令的功能:拷贝模式空间的内容,覆盖粘贴到保持空间。保持空间里面的空行被覆盖
G命令的功能:拷贝保持空间的内容,追加粘贴到模式空间
g命令的功能:拷贝保持空间的内容,覆盖粘贴到模式空间
示例:
sed '1,3H;$G' reg.txt #把1-3行的内容追加粘贴到文件末尾
sed '1h;1d;$G' reg.txt #把第1行剪切到文件末尾
sed '1h;2H;1,2d;$G' reg.txt #把1,2行剪切,粘贴到原第3行后面
2.5 替换关键字动作详细解释
2.5.1 s/old/new/
替换每行的第1个old为new
2.5.2 s/old/new/3
替换每行的第3个old为new
2.5.3 s/old/new/g
替换全部的old为new
2.5.4 s/()/\num/
()保留,复制
\粘贴
最多可以记住9个
素材文件test.txt
ni hao nb
welcome to beijing
把第一个字符和最后一个字符对调
sed -r 's/^(.)(.*)(.)$/\3\2\1/' test.txt
把第一个字符括起来,把中间任意字符括起来,再把最后一个字符括起来。这样就有3个括号,序号从1-3,把3和1对调就实现了
把第二个字符和倒数第二个字符对调
sed -r 's/^(.)(.)(.*)(.)(.)$/\1\4\3\2\5/' test.txt
2.5.5 s/doc/&s/
把doc替换为docs
2.5.6 sed '4,7s/^/#/'
将4-7行注释掉
2.6 sed命令示例
2.6.1 sed -n '4,+10p'
输出第4行及后面的10行,一共11行
2.6.2 sed $d
删除最后一行
2.6.3 sed /^$/d
删除全部空行
2.6.4 sed '/xml/!d'
删除不包含xml的行。!表示取反
2.6.5 sed -n /bash$/s#:.*##p /etc/passwd
查找能够登录系统的用户名
2.6.6 查找能够登录系统的用户名的密码
a=sed -n /bash$/s#:.*##p /etc/passwd
for i in $a
do
p1=grep "$i" /etc/shadow
p2=${p1:#:}
p3=${p2:%%:}
echo $p3
done
本文转自 goldwinner 51CTO博客,原文链接:http://blog.51cto.com/355665/2071177,如需转载请自行联系原作者