行数定位符

  • sed -n '3p' passwd #打印第3行
[root@myx01 ~]# nl passwd | sed -n '3p'
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
  • sed -n '1,3p' passwd #打印第1行到第3行
[root@myx01 ~]# nl passwd | sed -n '1,3p'
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin

  • sed -n '1,+3p' passwd #打印第1行和后面3行
[root@myx01 ~]# nl passwd | sed -n '1,+3p'
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin

  • sed -n '1~2p' passwd #打印奇数行
[root@myx01 ~]# nl passwd | sed -n '1~2p'
     1	root:x:0:0:root:/root:/bin/bash
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

  • sed -n '2~2p' passwd #打印偶数行
[root@myx01 ~]# nl passwd | sed -n '2~2p'
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     8	halt:x:7:0:halt:/sbin:/sbin/halt

  • sed -n '2!p' passwd #不打印第二行
[root@myx01 ~]# nl passwd | sed -n '2!p'
     1	root:x:0:0:root:/root:/bin/bash
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

正则定位

[root@myx01 ~]# grep ^root passwd            #匹配以root开头的行
[root@myx01 ~]# sed -n '/^root/p' passwd     #匹配以root开头的行

[root@myx01 ~]# grep -E '[0-9]{3}' passwd     #匹配3个数字的行
[root@myx01 ~]# sed -rn '/[0-9]{3}/p' passwd  #匹配3个数字的行

过滤文件内容

[root@myx01 ~]# sed -n '/IPADDR/p'  /etc/sysconfig/network-scripts/ifcfg-ens33  #匹配IPADDR行
[root@myx01 ~]# free -m |sed -n '/Mem/p'    #匹配Mem行
[root@myx01 ~]# df -h |sed -n '/\/$/p'      #匹配以/结尾的行
[root@myx01 ~]# sed -n '1p;10p;11p' passwd  #打印1,10.11行

删除 -Delete -D

[root@myx01 ~]# sed 'd' passwd    #删除整文
[root@myx01 ~]# sed '1,3d' passwd   #删除第1到第3行 
[root@myx01 ~]# sed '1,3!d' passwd  #排除第1到第3行 不删除
[root@myx01 ~]# sed '/^root/d' passwd  #删除以root开头的行 
[root@myx01 ~]# sed '/^$/d' passwd    #删除空行

修改文件

[root@myx01 ~]# -i :永久删除
[root@myx01 ~]# sed  -i '1,3d' passwd   #删除第1到第3行 
[root@myx01 ~]# sed  -i.bak '1,3d' passwd  #删除第1到第3行 并备份

替换行 -c replace

[root@myx01 ~]# sed 'c 123456' passwd  #替换所有行为123456
[root@myx01 ~]# sed '/IPADDR/c IPADDR=2.2.2.2' ip.txt  #替换IP
[root@myx01 ~]# sed '/127/c 127.0.0.1 localhost' /etc/hosts  #将127替换成127.0.0.1 localhost
[root@myx01 ~]# sed '/SELINUX=enforcing/c SELINUX=disabled' /etc/selinux/config  #将[root@myx01 ~]# SELINUX=enforcing替换成SELINUX=disabled
[root@myx01 ~]# sed '4c 111111' passwd   #将文件的第4行更换成111111

替换关键字 -s Substitution

[root@myx01 ~]# sed 's/bin/BIN/' passwd   #将第一行bin替换成BIN
[root@myx01 ~]# sed 's/root/rooot/g' passwd   #将root替换成rooot
[root@myx01 ~]# sed 's/bin/BIN/2' passwd   #替换每一行的的第二个bin为BIN
[root@myx01 ~]# sed '2s/bin/BIN/g'      #替换第2行的bin为BIN
[root@myx01 ~]# sed 's/root/(&)/g' passwd  #将root替换成(root),&表示旧内容
[root@myx01 ~]# sed '2s/bin//g' passwd    #替换第二行的bin为空
[root@myx01 ~]# sed -n '2s/bin/BIN/p' passwd  #只显示第2行bin替换BIN

  • 注意:这里的替换符可以是其他的符号
[root@myx01 ~]# sed 's#root#rooot#g' passwd   #将root替换成rooot
[root@myx01 ~]# sed 's,root,rooot,g' passwd   #将root替换成rooot
[root@myx01 ~]# sed 's%root%rooot%g' passwd   #将root替换成rooot

正则-后向引用

[root@myx01 ~]# echo "hello ni hao"|sed -r 's/(.)(.*)(.)$/\3\2\1/'

打印行号 =

[root@myx01 ~]# sed -n '1=' passwd  #打印第1行行号
[root@myx01 ~]# sed -n '5=' passwd   #打印第5行行号
[root@myx01 ~]# sed -n '/root/=' passwd  #打印包含root的行号
[root@myx01 ~]# sed -n '/^root/=' passwd   #打印以root开头的行号
[root@myx01 ~]# sed -n '/bash$/=' passwd   #打印以bash结尾的行号
[root@myx01 ~]# sed -n '$=' passwd   #打印整个文件的总行号

  • 多行文本处理
[root@myx01 ~]# i   insert  插入 
[root@myx01 ~]# sed '2i abc_cba' passwd   #在第二行插入abc_cba
[root@myx01 ~]# sed '/root/i abc_cba' passwd  #在找到的root行前插入abc_cba
[root@myx01 ~]# sed '/root/i abc\ncba' passwd #在找到的root行前插入abc和cba2行

a > append追加

[root@myx01 ~]# sed '2a abc_cba' passwd      #在第二行后追加abc_cba
[root@myx01 ~]# sed '2a abc\ncba' passwd     #在第二行后追加abc和cba2行

r > read 读取其他文件内容

[root@myx01 ~]# sed '2r /etc/hosts' passwd  #读取/etc/hosts文件内容并追加到passwd文件的第2行后面
[root@myx01 ~]# sed 'r /etc/hosts' passwd  #在passwd每一行后导入/etc/hosts文件的内容
[root@myx01 ~]# sed '/root/r /etc/hosts' passwd #在包含root的行后面插入/etc/hosts的内容

w > write 保存到其他文件

[root@myx01 ~]# sed 'w passwd_new' passwd  #将passwd的内容另存为一个新的文件:passwd_new
[root@myx01 ~]# sed '/root/w passwd_new' passwd    #将包含root行的内容另存为一个新的文件:passwd_new
[root@myx01 ~]# sed '1,2w passwd_new' passwd    #将第1和2行的内容另存为一个新的文件:passwd_new