sed工具基本用法

sed:Stream Editor,流式编辑器

-非交互,基于模式匹配过滤及修改文本

-逐行处理,并将结果输出到屏幕

-可实现对文本的输出,删除,替换,复制,剪切,导入,导出等各种操作

sed常用的选项:

-n (屏蔽默认输出,默认sed会输出读取文档的全部内容)

-r (让sed支持扩展正则)

-i (sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响)

[root@localhost ~]# sed -n '1p;4p' a.txt       #打印第一行和第四行
aaaaaa
dddddd
 

[root@localhost ~]# sed -n '1,3p' a.txt      #打印1到3行
aaaaaa
bbbbbb
cccccc
 

扫描二维码关注公众号,回复: 5729742 查看本文章

[root@localhost ~]# sed -n '2,+2p' a.txt      #打印第2行以及之后的2行
bbbbbb
cccccc
dddddd

[root@localhost ~]# sed -n '1~2p' a.txt     #打印奇数行
aaaaaa
cccccc
eeeeee
gggggg

[root@localhost ~]# sed -n '2~2p' a.txt      #打印偶数行
bbbbbb
dddddd
ffffff

[root@localhost ~]# cat -n /etc/passwd | sed -n '3,+10p'      #sed可以配合管道使用
     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
     6    sync:x:5:0:sync:/sbin:/bin/sync
     7    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8    halt:x:7:0:halt:/sbin:/sbin/halt
     9    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10    operator:x:11:0:operator:/root:/sbin/nologin
    11    games:x:12:100:games:/usr/games:/sbin/nologin
    12    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13    nobody:x:99:99:Nobody:/:/sbin/nologin

[root@localhost ~]# sed -n '/bash$/p' /etc/passwd      #找到bash结尾的行打印出来
root:x:0:0:root:/root:/bin/bash
usetr:x:1000:1000:usetr:/home/usetr:/bin/bash
 

sed工具的p、d、s操作

p=打印,d=删除,s=替换

[root@localhost ~]# sed -n '$=' a.txt     #打印文件一共有几行
7
[root@localhost ~]# sed -n '/^root/=' /etc/passwd     #以root开头的行号
1
[root@localhost ~]# sed -n '/root/=' /etc/passwd     #包含root的行号
1
10

[root@localhost ~]# sed '3,5d' a.txt      #删除3到5行
aaaaaa
bbbbbb
ffffff
gggggg
 

[root@localhost ~]# sed '/xml/d' a.txt      #删除包含xml字符的行

[root@localhost ~]# sed '/xml/!d' a.txt        #删除没有包含xml的行
[root@localhost ~]# sed '/^install/d' a.txt        #删除以install开头的行

[root@localhost ~]# sed '$d' a.txt      #删除文件的最后一行
[root@localhost ~]# sed '/^$/d' a.txt    #删除所有空白行
 

[root@localhost ~]# cat b.txt
2017 2011 2018
2017 2017 2024
2017 2017 2017
[root@localhost ~]# sed 's/2017/xxxx/g' b.txt   #用xxxx替换2017
xxxx 2011 2018
xxxx xxxx 2024
xxxx xxxx xxxx

[root@localhost ~]# sed 's/2017/xxxx/2' b.txt  #替换每行的第2个2017
2017 2011 2018
2017 xxxx 2024
2017 xxxx 2017

[root@localhost ~]# sed 's/2017//' b.txt    #每行都删除一个2017
 2011 2018
 2017 2024
 2017 2017
[root@localhost ~]# sed 's/2017//g' b.txt    #所有的2017都删除
 2011 2018
  2024
[root@localhost ~]# sed -n 's/2017/xxxx/p' b.txt   #替换每行的第一个2017并打印出来 
xxxx 2011 2018
xxxx 2017 2024
xxxx 2017 2017
 

[root@localhost ~]# sed -n 's#/bin/bash#/sbin/sh#p' /etc/passwd    #将/bin/bash替换为/sbin/sh,这里分隔符是用的#
root:x:0:0:root:/root:/sbin/sh
usetr:x:1000:1000:usetr:/home/usetr:/sbin/sh

[root@localhost ~]# sed -r 's/^(.)(.*)(.)/\3\2\1/' b.txt     #将每行的第一个字符和最后一个调换
8017 2011 2012
4017 2017 2022
7017 2017 2012

[root@localhost ~]# sed -r 's/^(.)(.)(.*)(.)(.)/\1\4\3\2\5/' b.txt    #将每行的第2个字符和倒数第二个调换
2117 2011 2008
2217 2017 2004
2117 2017 2007

[root@localhost ~]# sed 's/.$//'  b.txt    #删除每行最后一位
2017 2011 201
2017 2017 202
2017 2017 201

[root@localhost ~]# sed 's/[0-9]//' b.txt     #删除每行的第一个数字
017 2011 2018
017 2017 2024
017 2017 2017

[root@localhost ~]# sed -r 's/[0-9]//g;s/^()+//' c.txt    #删除所有的数字和行首的空格
Hello the world
ni hao ma shenzhen

[root@localhost ~]# sed -r  's/([A-Z])/[\1]/g' c.txt     #为文件中每个大写字母添加括号
[H]ello the world
ni hao ma shenzhen


 

猜你喜欢

转载自blog.csdn.net/weixin_42182501/article/details/88321154
今日推荐