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'

Google

[root@96 ~]#echo '"name": "Google"'|sed -rn 's/.* "(.*)",?/\1/p'

Google