1.sed是一个非交互式文本编辑器,基本用法
sed参数‘指令’文件
常用参数有:
-n:安静模式,sed默认会打印出文本中的所有行,加上-n参数表示只打印指定的行
[root@zhu1 ~]# sed '1p' zhu.txt ming yue ji shi you. ming yue ji shi you. ba jiu wen qing tian bu zhi tian shang gong que goad #jin xi shi he nian root oo* #an good man [root@zhu1 ~]# sed -n '1p' zhu.txt ming yue ji shi you.
-e:表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e可以省略
-r:sed动作支持延伸正规表示法,默认仅支持基础正规表示法
2.sed命令中定位文本行的方法
x:x为指定的行号
x,y:指定行号的范围,2,5:表示从第二行到第5行
/pattern/:表示包含模式的行
/pattern/pattern/:表示包含两个模式的行
/pattern/,x:从匹配模式的行到x行之间的行
x,/pattern/:表示从x行到匹配模式的行之间的行
x,y!:表示不在指定x行到y行之间的行
3.sed的编辑命令
p:打印出匹配的行
[root@zhu1 ~]# sed -n '2p' zhu.txt ba jiu wen qing tian [root@zhu1 ~]# sed -n '2'p zhu.txt ba jiu wen qing tian
sed的基本编辑命令可以放在单引号内,也可以放在单引号外
=:打印文件的行号
[root@zhu1 ~]# sed -n '/yue/=' zhu.txt 1
[root@zhu1 ~]# sed '2 a\mingyue' zhu.txt ming yue ji shi you. ba jiu wen qing tian mingyue bu zhi tian shang gong que goad #jin xi shi he nian root oo* #an good man [root@zhu1 ~]# sed '2a\mingyue' zhu.txt ming yue ji shi you. ba jiu wen qing tian mingyue bu zhi tian shang gong que goad #jin xi shi he nian root oo* #an good man [root@zhu1 ~]# sed '2a\ming yue' zhu.txt ming yue ji shi you. ba jiu wen qing tian ming yue bu zhi tian shang gong que goad #jin xi shi he nian root oo* #an good man
[root@zhu1 ~]# sed '2aming yue' zhu.txt ming yue ji shi you. ba jiu wen qing tian ming yue bu zhi tian shang gong que goad #jin xi shi he nian root oo* #an good man
总结:a\:中\可以不要,同时a和行号之间可以有空格也可以没有,添加的内容会在指定行的下一行
[root@zhu1 ~]# sed '2i\mingyuexin' zhu.txt ming yue ji shi you. mingyuexin ba jiu wen qing tian bu zhi tian shang gong que goad #jin xi shi he nian root oo* #an good man
d:删除指定的行
[root@zhu1 ~]# sed '2,4d' zhu.txt ming yue ji shi you. #an good man
c\:替换,把指定的行替换为c\后要替换的内容
[root@zhu1 ~]# sed '2,4c\zhuzhu' zhu.txt ming yue ji shi you. zhuzhu #an good man
s:替换,模式为:s/原字符/新字符串/g
[root@zhu1 ~]# sed 's/ming yue/zhujiangtao/g' zhu.txt zhujiangtao ji shi you. ba jiu wen qing tian bu zhi tian shang gong que goad #jin xi shi he nian root oo* #an good man
s为对字符串进行替换,c为对匹配的文本行进行替换
r:从另一个文件中读文本,把另一个文件的内容添加到指定行的下一行
[root@zhu1 ~]# nl jiang.txt 1 NI KE ZHI DAO 2 wo de xin li 3 zhu 4 zhuzhu [root@zhu1 ~]# sed '3r jiang.txt' zhu.txt ming yue ji shi you. ba jiu wen qing tian bu zhi tian shang gong que goad NI KE ZHI DAO wo de xin li zhu zhuzhu #jin xi shi he nian root oo* #an good man
[root@zhu1 ~]# sed '3w tianxia.sql' zhu.txt ming yue ji shi you. ba jiu wen qing tian bu zhi tian shang gong que goad #jin xi shi he nian root oo* #an good man [root@zhu1 ~]# nl tianxia.sql 1 bu zhi tian shang gong que goad
y:变换字符,模式:y/被变换的字符序列/变换的字符序列/
[root@zhu1 ~]# nl zhu.txt 1 ming yue ji shi you. 2 ba jiu wen qing tian 3 bu zhi tian shang gong que goad 4 #jin xi shi he nian root oo* 5 #an good man [root@zhu1 ~]# sed 'y/mz/XX/' zhu.txt Xing yue ji shi you. ba jiu wen qing tian bu Xhi tian shang gong que goad #jin xi shi he nian root oo*
c:替换的是行
s:替换的是字符串
y:替换的是字母
{}:在定位行执行的命令组,对定位行执行多个编辑命令,相当于使用多个-e
[root@zhu1 ~]# sed -n -e '3,5p' -e '3,5=' zhu.txt bu zhi tian shang gong que goad 3 #jin xi shi he nian root oo* 4 #an good man 5 [root@zhu1 ~]# sed -n '3,5{p;=}' zhu.txt bu zhi tian shang gong que goad 3 #jin xi shi he nian root oo* 4 #an good man 5
{}内编辑指令用分号隔开
sed的常用情况以及与grep的结合用法
输出eth0的ip地址
[root@zhu1 ~]# ifconfig eth0| grep 'inet addr' inet addr:192.168.1.107 Bcast:255.255.255.255 Mask:255.255.255.0 [root@zhu1 ~]# ifconfig eth0| grep 'inet addr' | sed 's/^.*addr://g' 192.168.1.107 Bcast:255.255.255.255 Mask:255.255.255.0 [root@zhu1 ~]# ifconfig eth0| grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' 192.168.1.107