Sed 的基础用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sed 的基础用法相关的知识,希望对你有一定的参考价值。

Sed 的基础用法

sed [ -nefr] [n1,n2] action

-n: 是安静模式,只有经过sed处理的行才会显示,其他不现实

-e:表示直接在命令行上执行。是默认选项不用填写。

-f: 将Sed的操作写在一个文件里面,用的时候-f filename 就可以按照内容进行Sed操作

-r :表示支持正则表达式

n1,n2 代表的是行数

Sed的action (动作)支持如下参数

a: 表示添加,后接字符串,添加到当前行的下一行

c:表示替换,后接的字符串,用它来替换N1到N2之间的行

d:删除行

i:表示插入,后街字符串,添加到当然行的上一行

p:表示打印和-n一起使用

s: 表示搜索,还可以替换1,20s/old/new/g表示把1到20行的old换成new


  • 以行为单位的新增/删除功能

1.删除passwd 2-6行

[[email protected] ~]# nl passwd | sed ‘2,6d‘

     1    root:x:0:0:root:/root:/bin/bash

     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    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

    11    operator:x:11:0:operator:/root:/sbin/nologin

    12    games:x:12:100:games:/usr/games:/sbin/nologin

    13    gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

    14    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

    15    nobody:x:99:99:Nobody:/:/sbin/nologin

    16    dbus:x:81:81:System message bus:/:/sbin/nologin

    17    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

    18    saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin

2. 删除第 3 到最后一行

[[email protected] ~]# nl passwd | sed ‘3,$d‘

     1    root:x:0:0:root:/root:/bin/bash

     2    bin:x:1:1:bin:/bin:/sbin/nologin

3.在第二行后(亦即是加在第三行)加上『drink tea?』字样

[[email protected] ~]# nl /etc/passwd|sed ‘2a dirnk tea‘

     1    root:x:0:0:root:/root:/bin/bash

     2    bin:x:1:1:bin:/bin:/sbin/nologin

dirnk tea

     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

4.在第二行前加上『drink tea?』字样

[[email protected] ~]# nl /etc/passwd|sed ‘1a dirnk tea‘

     1    root:x:0:0:root:/root:/bin/bash

dirnk tea

     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

     5    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6    sync:x:5:0:sync:/sbin:/bin/sync

[[email protected] ~]# nl /etc/passwd|sed ‘2i dirnk tea‘

     1    root:x:0:0:root:/root:/bin/bash

dirnk tea

     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

     5    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6    sync:x:5:0:sync:/sbin:/bin/sync

5.第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』

[[email protected] ~]# nl /etc/passwd|sed ‘2a drink tea or ......\

> dirnk beer?‘

     1    root:x:0:0:root:/root:/bin/bash

     2    bin:x:1:1:bin:/bin:/sbin/nologin

drink tea or ......

dirnk beer?

     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





  • 以行为单位的取代与显示功能


1.我想将第2-5行的内容取代成为『No 2-5 number』呢?

 [[email protected] ~]# nl /etc/passwd|sed ‘2,5c NO 2-5 number‘

      1    root:x:0:0:root:/root:/bin/bash

 NO 2-5 number

      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    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

     11    operator:x:11:0:operator:/root:/sbin/nologin

2.仅列出 /etc/passwd 文件内的第 5-7 行

[[email protected] ~]# nl /etc/passwd|sed -n ‘5,7p‘

     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



部分数据的搜寻取代的功能


1.打印ip地址

[[email protected] ~]# ifconfig eth0 | grep ‘inet addr‘ | sed ‘s/^.*addr://g‘|sed ‘s/Bcast.*//g‘

192.168.9.109

注解: sed ‘s/^.*addr://g‘ 删除任何开头addr:的部分  后面直接替换成空

      sed ‘s/Bcast.*//g‘ 删除Bcast结尾的部分

      

 


直接修改文件的内容(危险动作)

1.利用sed 把passwd 文件内每一行结尾若为nologin 则换成!

[[email protected] ~]# sed -i ‘s/nologin$/\!/g‘ passwd

[[email protected] ~]# nl passwd

     1    root:x:0:0:root:/root:/bin/bash

     2    bin:x:1:1:bin:/bin:/sbin/!

     3    daemon:x:2:2:daemon:/sbin:/sbin/!

     4      adm:x:3:4:adm:/var/adm:/sbin/!

     5     lp:x:4:7:lp:/var/spool/lpd:/sbin/!

     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/!

    10    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/!

 



常用实例

1.删除passwd行首的空格


[[email protected] ~]# nl passwd

     1    root:x:0:0:root:/root:/bin/bash

     2    bin:x:1:1:bin:/bin:/sbin/!

     3    daemon:x:2:2:daemon:/sbin:/sbin/!

     4      adm:x:3:4:adm:/var/adm:/sbin/!

     5     lp:x:4:7:lp:/var/spool/lpd:/sbin/!

[[email protected] ~]# sed ‘s/^ * //g‘ passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/!

daemon:x:2:2:daemon:/sbin:/sbin/!

adm:x:3:4:adm:/var/adm:/sbin/!

lp:x:4:7:lp:/var/spool/lpd:/sbin/!

[[email protected] ~]# sed ‘s/^[ ]* //g‘ passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/!

daemon:x:2:2:daemon:/sbin:/sbin/!

adm:x:3:4:adm:/var/adm:/sbin/!

lp:x:4:7:lp:/var/spool/lpd:/sbin/!

[[email protected] ~]# sed ‘s/^[[:space:]]* //g‘ passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/!

daemon:x:2:2:daemon:/sbin:/sbin/!

adm:x:3:4:adm:/var/adm:/sbin/!

lp:x:4:7:lp:/var/spool/lpd:/sbin/!

 


本文出自 “天真无邪” 博客,请务必保留此出处http://innocence.blog.51cto.com/4313888/1963234

以上是关于Sed 的基础用法的主要内容,如果未能解决你的问题,请参考以下文章

sed命令基础及高级用法

linux学习基础6之sed用法详解

sed 基础用法

sed 基础用法

linux学习基础6之sed用法详解

文本处理三剑客之-sed基础用法