美文网首页
sed 命令用法与实例

sed 命令用法与实例

作者: ly稻草 | 来源:发表于2018-08-29 10:50 被阅读0次

    语法  sed     '范围(条件)  命令'       file

                    d: 删除

                      范围: 使用数字 表示多少行, 可以使用逗号表示到。 ~表示跨步

                                 $ 表示最后一行

                                  [root@hadoop000 ~]#  cat  -n  /etc/passwd | sed '10.35d’

                                  正则表达式: // 引起来

     [root@hadoop000 ~]# cat  aa

    to

    tom aaa bbbtomaaa

    111 tom aaaTom cccc

    aaaatomaaaaaa

    aaaaaaaaaaaaaaaaaatom

                                 [root@hadoop000 ~]# sed '/tom/d' aa        ##删除tom行

                                   to

                                  [root@hadoop000 ~]# sed '/^tom/,/tom$/d' aa   ##删除tom行

                                   to

                                   [root@hadoop000 ~]# sed '/\btom\b/d' aa        ###删除tom单词行      

                                   to

                                   aaaatomaaaaaa

                                   aaaaaaaaaaaaaaaaaatom

                         s : 替换  s/old/new/标签      意思是把old换成new

                                                old是可以使用正则的,但是new的位置不能使用正则

                                                       & 表示old的值

                                                        \U 把\U后面所有的字符全部转变为大写

                                                         \u 把\u后面第一个字符变成大写

                                                         \L  把后面所有的字符变成小写

                                                         \l  把后面第一个字符变成小写

                                                         \E  代表是终止

                             [root@hadoop000 ~]# sed 's/tom/TOM/' aa   ###这样只替换每行的第一个tom 

                              to

                              TOM aaa bbbtomaaa

                              111 TOM aaaTom cccc

                               aaaaTOMaaaaaa

                              aaaaaaaaaaaaaaaaaaTOM

                               [root@hadoop000 ~]# sed 's/tom/TOM/g' aa  ###加上标签g 把第一个tom也替换掉了

                               to

                               TOM aaa bbbTOMaaa

                               111 TOM aaaTom cccc

                               aaaaTOMaaaaaa

                               aaaaaaaaaaaaaaaaaaTOM

                                [root@hadoop000 ~]# sed 's/[tT][Oo]m/TOM/g' aa   ###不管是大小写t与大小写o都替换

                                 to

                                 TOM aaa bbbTOMaaa

                                 111 TOM aaaTOM cccc

                                  aaaaTOMaaaaaa

                                  aaaaaaaaaaaaaaaaaaTOM

                                [root@hadoop000 ~]# cat  bb

                                TOM TOM TOM AAA AAA AAA

                                aaa

                                [root@hadoop000 ~]# sed '1{s/tom/TOM/g; s/aaa/AAA/g}' bb  ###指定第一行替换多个  

                                TOM TOM TOM AAA AAA AAA

                                aaa

                               [root@hadoop000 ~]# sed 's/tom/--&--/g' aa   ##这里的&相当于old

                               to

                              --tom-- aaa bbb--tom--aaa

                             111 --tom-- aaaTom cccc

                             aaaa--tom--aaaaaa

                             aaaaaaaaaaaaaaaaaa--tom--

                 [root@hadoop000 ~]# cat  aa

                 to

                 tom aaa bbbtomaaa

                 111 tom aaaTom cccc

                 aaaatomaaaaaa

                 aaaaaaaaaaaaaaaaaatom

                 [root@hadoop000 ~]# sed 's/tom/yyy\Uyyy/g' aa                  \U 把\U后面所有的字符全部转变为大写

                  to

                  yyyYYY aaa bbbyyyYYYaaa

                  111 yyyYYY aaaTom cccc

                  aaaayyyYYYaaaaaa

                  aaaaaaaaaaaaaaaaaayyyYYY

                  [root@hadoop000 ~]# sed  's/tom/y\uyyy/g' aa           \u 把\u后面第一个字符变成大写

                   to

                   yYyy aaa bbbyYyyaaa

                   111 yYyy aaaTom cccc

                   aaaayYyyaaaaaa

                    aaaaaaaaaaaaaaaaaayYyy

                  [root@hadoop000 ~]# sed  's/tom/T\LTTTT/g' aa            \L  把后面所以的字符变成小写

                   to

                   Ttttt aaa bbbTttttaaa

                   111 Ttttt aaaTom cccc

                   aaaaTttttaaaaaa

                   aaaaaaaaaaaaaaaaaaTtttt

                 [root@hadoop000 ~]# more  aa

                  to

                   tom aaa bbbtomaaa

                   111 tom aaaTom cccc

                    aaaatomaaaaaa

                     aaaaaaaaaaaaaaaaaatom

                    [root@hadoop000 ~]# sed  's/tom/T\lTTTT/g' aa        \l  把后面第一个字符变成小写

                    to

                   TtTTT aaa bbbTtTTTaaa

                   111 TtTTT aaaTom cccc

                    aaaaTtTTTaaaaaa

                   aaaaaaaaaaaaaaaaaaTtTTT                              

              [root@hadoop000 ~]# more smb.conf  要求把[]里面小心的字符换成大小的

              [public]

              public = yes

              [liyong]

              writable = yes

            [root@hadoop000 ~]# sed 's/\[.*]/\U&/' smb.conf  

            [PUBLIC]

            public = yes

            [LIYONG]

            writable = yes

                        [root@hadoop000 ~]# sed 's/tom/yyy\Uyyy\Ey/g' aa      \E  代表是终止

                        to

                       yyyYYYy aaa bbbyyyYYYyaaa

                      111 yyyYYYy aaaTom cccc

                      aaaayyyYYYyaaaaaa

                      aaaaaaaaaaaaaaaaaayyyYYYy     

          分组(group) : 在old部分相关位置使用()扩起来,在new可以引用。第一括号使用\1  \2

     [root@hadoop000 conf]# sed  -n  's/#\(ServerName\)/\1/p' /etc/httpd/conf/httpd.conf    

    ServerNamewww.example.com:80

    [root@hadoop000 conf]# sed  -n  's/#\(Server\)\(Name\)/\2/p' /etc/httpd/conf/httpd.conf

    Namewww.example.com:80

     a : 在指定行的下一行添加一行

      i  :   在指定行的上一行添加

      c :   替换 ---> 把满足某个条件的行替换

      y :  替换 

    注意: 如果想使用sed修改源文件的话,那么不要使用-n选项和p标签

     [root@hadoop000 ~]# cat  ifcfg-eth0

    DEVICE=eth0

    TYPE=Ethernet

    ONBOOT=yes

    NM_CONTROLLED=yes

    BOOTPROTO=none

    IPADDR=192.168.192.251

    NETMASK=255.255.255.0

    GATEWAY=192.168.192.2

    [root@hadoop000 ~]# sed '2a DNS1=192.168.30.1' ifcfg-eth0

    DEVICE=eth0

    TYPE=Ethernet

    DNS1=192.168.30.1

    ONBOOT=yes

    NM_CONTROLLED=yes

    BOOTPROTO=none

    IPADDR=192.168.192.251

    NETMASK=255.255.255.0

    GATEWAY=192.168.192.2

    [root@hadoop000 ~]# sed '/^ONBOOT/c ONBOOT=no' ifcfg-eth0

    DEVICE=eth0

    TYPE=Ethernet

    ONBOOT=no

    NM_CONTROLLED=yes

    BOOTPROTO=none

    IPADDR=192.168.192.251

    NETMASK=255.255.255.0

    GATEWAY=192.168.192.2

    [root@hadoop000 ~]# sed '2y/abc/XYZ/' aa   

    to

    tom XXX YYYtomXXX

    111 tom aaaTom cccc

    aaaatomaaaaaa

    aaaaaaaaaaaaaaaaaatom

    #######sed 老段下######

    记住: 我们所做的所以的操作,并没有改变源文件

         = 

         n  读取下一行

         N  追加 也是读取下一行

    #n 读取下一行之后,会覆盖模式空间的内容

    [root@hadoop000 ~]# sed -n  '1{n;p}' ifcfg-eth0  

    TYPE=Ethernet

    [root@hadoop000 ~]# sed -n  '1{N;p}' ifcfg-eth0  

    DEVICE=eth0

    TYPE=Ethernet

    保持空间

       x: 让 保持空间和模式空间的数据互换

       h:    把模式空间的内容拷贝到保持空间(覆盖)

       H:    把模式空间的内容拷贝保持空间(追加)

       g:    把保持空间的内容写入到模式空间(覆盖)

       G: 把保持空间的内容写入到模式空间(追加)

    使用sed标签功能,可以让我们实现循环

    语法:

               sed ':标签 范围1  命令1;  /模式/b 标签名'  file 

    [root@hadoop000 ~]# more  dd

    rhce aaa rhce rhce

    rhce aaa rhce rhce

    rhce aaa rhce rhce

    rhce aaa rhce rhce

    rhce aaa rhce rhce

    [root@hadoop000 ~]# sed ':XX s/rhce/RHCE/; /rhce/b XX' dd

    RHCE aaa RHCE RHCE

    RHCE aaa RHCE RHCE

    RHCE aaa RHCE RHCE

    RHCE aaa RHCE RHCE

    RHCE aaa RHCE RHCE 

    [root@hadoop000 ~]# more cc

    tom

    jingli

    bob

    zongjian

    mary

    jingli

    jerry

    zongjian

    [root@hadoop000 ~]# sed -n   -e 'x;n' -e  '/jingli/{x;p}' cc

    tom

    mary

    [root@hadoop000 ~]# sed -n   -e  '/jingli/!h' -e '/jingli/{x;p}' cc        

    tom

    mary

    [root@hadoop000 ~]# sed -n   -e  '/jingli/!h' -e '/jingli/{H;x;p}' cc

    tom

    jingli

    mary

    jingli

    [root@hadoop000 ~]# sed -n   -e  '/jingli/!h' -e '/jingli/{H;x;s/\n/:/;p}' cc      

    tom:jingli

    mary:jingli

    要求:职位和用户互换位置

    [root@hadoop000 ~]# more cc

    tom

    jingli

    bob

    zongjian

    mary

    jingli

    jerry

    zongjian

    [root@hadoop000 ~]# sed -n  'h;n;G;s/\n/:/;p' cc          ## G: 把保持空间的内容写入到模式空间(追加)

    jingli:tom

    zongjian:bob

    jingli:mary

    zongjian:jerry

    要求:想把所有的用户名全部打印出来

    [root@hadoop000 ~]# more  cc

    tom

    jingli

    bob

    zongjian

    mary

    jingli

    jerry

    zongjian

    [root@hadoop000 ~]# sed -n  'h;n;g;p' cc

    tom

    bob

    mary

    jerry

    例题: sed打印基数行 与偶数行 

    [root@hadoop000 ~]# seq 10 |sed 'n;d'             ###n  读取下一行  d 删除

    1

    3

    5

    7

    9

    [root@hadoop000 ~]# seq 10 |sed -n '1~2p'

    1

    3

    5

    7

    9

    [root@hadoop000 ~]# seq 10 |sed -n 'p;n'

    1

    3

    5

    7

    9

    [root@hadoop000 ~]# seq 10 |sed  '2~2d'  

    1

    3

    5

    7

    9

    [root@hadoop000 ~]# seq 10 |sed  'p;N;d'

    1

    3

    5

    7

    9

    [root@hadoop000 ~]# seq  10 |sed 'N;s/\n/ /'

    1 2

    3 4

    5 6

    7 8

    9 10

    例题: sed打印 偶数行 

    相关文章

      网友评论

          本文标题:sed 命令用法与实例

          本文链接:https://www.haomeiwen.com/subject/xkshwftx.html