功能
sed全名叫stream editor,流编辑器,用程序的方式来编辑文本,sed玩的就是正则表达式。
示例
1、使用下面这段文本作为演示。
[root@linux-time src]# cat e.txte e equ xiang xiang tian gebai mao fu lv shuihong zhang bo qing bo
2、替换文本中每行第一次出现的e为o,并将结果作为标准输出。
[root@linux-time src]# sed 's/e/o/' e.txto e equ xiang xiang tian gobai mao fu lv shuihong zhang bo qing bo
3、替换文本中每行所有出现的e为o,并将结果作为标准输出。
[root@linux-time src]# sed 's/e/o/g' e.txto o oqu xiang xiang tian gobai mao fu lv shuihong zhang bo qing bo
4、替换文本中每行所有出现的e为o,并将结果写入文件。
[root@linux-time src]# sed -i 's/e/o/g' e.txt [root@linux-time src]# cat e.txt o o oqu xiang xiang tian gobai mao fu lv shuihong zhang bo qing bo
5、将第3行的u替换成v,并将结果打印到标准输出。
[root@linux-time src]# sed '3s/u/v/g' e.txt o o oqu xiang xiang tian gobai mao fv lv shvihong zhang bo qing bo
6、删除全部以o结尾的行
[root@linux-time src]# sed '/o$/d' e.txt bai mao fu lv shui
7、可以将sed作为grep命令使用,例如打印匹配mao的行。
[root@linux-time src]# sed -n '/mao/p' e.txt bai mao fu lv shui
8、打印第一行到匹配成功bai的行
[root@linux-time src]# sed -n '1,/bai/p' e.txto o oqu xiang xiang tian gobai mao fu lv shui
9、多个匹配,将每行第一次出现的go和bo替换成to。
[root@linux-time src]# sed -e 's/go/to/' -e 's/bo/to/' e.txt o o oqu xiang xiang tian tobai mao fu lv shuihong zhang to qing bo
10、打印文本的第2行
[root@linux-time src]# sed '2q;d' e.txt qu xiang xiang tian go
思考
1、用sed只替换2到5行的内容该怎么写?
2、用sed只替换每行第二个匹配到的字符怎么写?
3、用sed在每行的开头或结尾加字符要怎么写?
补充
1、如果匹配模式中有"/"符号,可以使用其他符号替代,以降低匹配模式编写的复杂度,例如用'#'符替代:
sed 's#http://#ftp://#g' filename
2、补充一下正则表达式最基本的东西
^ 表示一行的开头。如:/^#/ 以#开头的匹配。
$ 表示一行的结尾。如:/}$/ 以}结尾的匹配。
\< 表示词首。如:\
\> 表示词尾。如:abc\>表示以abc结尾的词。
. 表示任何单个字符。
* 表示某个字符出现了0次或多次。
[ ] 字符集合。如:[abc] 表示匹配a或b或c,还有 [a-zA-Z] 表示匹配所有的26个字符。
如果其中有^表示取反,如 [^a] 表示非a的字符。
再补充一个^$表示空行
3、好了,就这样,sed命令实践性很强,一定要自己按照例子多敲几次。
长按识别或扫码关注「Linux命令手册」
可以快速查询命令和提升Linux技能哦!