sed [选项] ‘地址命令’ 文件名
选项:
-n 静默模式,不再显示模式空间的内容;
-i.bak 先备份源文件再进行修改源文件;
-e 多点编辑;也可以多个命令使用很好分割用来代替-e选项;
-f sed的脚本文件;
-r 支持扩展的正则表达式;
地址:
1、3,5 3到5行 $代表最后一行
2、/正则/ /^root/
3、/pattern1/,/patter2/ 从/pattern1/开始到/patter2/结束的行范围
4、5 第五行
5、4,+3 从第4行到之后的3行
6、步进:~ 1~2:表示从1开始,步进2行,如1,3,5,7行即所有奇数行;2~2:表示所有偶数行;
命令:
a \ 符合条件的行后追加新行,\n 可以追加多行
i \ 符合条件的行前追加新行,\n 可以追加多行
c \ 替换符合条件的行
r file 将指定的文件内容导入到符合条件的行后面
w file 将符合条件的内容另存为一个指定的文件中
p 打印符合条件的行
d 删除符合条件的行
! 表示取反 2!d 除了第二行不删,其它都删除。也就是打印第二行,注意不用加选项-n
s/pattern/string/修饰符 查找并替换
修饰符
g 全局替换
i 忽略大小写
p 打印替换的行
举例:
1,查到本机IP地址
root@ubuntu:~/shou# ifconfig eth0 | sed -r '2!d ; s#(.*:)(.*)( Bcast.*)#\2#'
[root@shou ~]# ifconfig ens33 | sed -n -r '2s#(.*)inet (.*) net(.*)#\2#p'
182.168.1.110
root@ubuntu:~/shou#ifconfig eth0 | sed -n '2p'| sed -r 's#(.*:)(.*)( Bcast.*)#\2#'
182.168.1.110
2,多点编辑
root@ubuntu:~/shou# cat f1.tzt | sed -n '2p ; 5p'
2
4
root@ubuntu:~/shou# cat f1.tzt | sed -n -e '2p' -e ' 5p'
2
4
root@ubuntu:~/shou# ifconfig eth0 | sed -r -e '2!d' -e 's#(.*:)(.*)( Bcast.*)#\2#'
182.168.1.110
3、!的用法
root@ubuntu:~/shou# ifconfig eth0 | sed -r '2!d'
inet addr:221.2.90.174 Bcast:221.2.90.175 Mask:255.255.255.252
4,查找和替换
[root@96 ~]#sed -nr '/^GRUB_CMDLINE_LINUX/s/"$/ net.ifnames=0"/p' ./grub
GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
5,截取需要的列
[root@96 ~]#echo '"name": "Google",'|sed -rn 's/.* "(.*)",?/\1/p'
[root@96 ~]#echo '"name": "Google"'|sed -rn 's/.* "(.*)",?/\1/p'