Linux命令之sed

sed

命令说明:

sed过滤、添加、编辑修改等等功能。重点

sed本身也是一个管道命令,可以分析standard input的,而且sed还可以将数据进行替换、删除、新增、选取特定行等的功能


语法:

sed[-nefr] 动作

-n :使用安静(silent)模式。在一般的sed用法中,所有来自STDIN的数据一般都会被列出到屏幕  

    上,但如果加上-n参数后,则只有经过sed特殊处理的那一行(后者操作)才会被列出来

-e :直接子命令行模式上进行sed的动作编辑

-f :直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作

-r sed的动作支持的是扩展型正则表达式的语法(默认是基础正则表达式语法)

-i :直接修改读取的文件内容,而不是由屏幕输出


动作说明: [n1[,n2]] function

n1 :不见得会存在,一般代表选择进行动作的行数

function有下面这些参数:

a :新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)

c :替换,c的后面可以接字符串,这些字符串可以替换n1n2之间的行

d :删除,因为是删除,所以d后面通常不接任何参数

i :插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)

p :打印,也就是将某个选择的数据打印出来,通常p会与参数sed-n 一起运行

s :替换,可以直接进行替换的工作,通常这个s的动作可以搭配


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

范例:

nl /etc/passwd | sed ‘2,5d’     删除2-5

nl /etc/passwd | sed ‘2d’       删除第2

nl /etc/passwd | sed ‘2,$d      删除2到最后一行

・以行为单位的替换与显示功能

nl /etc/passwd | sed ‘2,5c NO 2-5 number’

nl /etc/passwd | sed -n ‘5,7p ’      仅显示5-7

sed -n '$p' ab               #显示最后一行

sed -n '/ruby/p' ab    #查询包括关键字ruby所在所有行

sed -n ‘/\$/p’ ab      #查询ab中包括关键字$所在所有行使用\屏蔽特殊含义


sed '1a drink tea\nor coffee' ab   #第一行后增加多行,使用换行符\n


・部分数据的查找并替换的功能

sed ‘s/要被更换的字符串/新的字符串/g’

・直接修改文件内容(危险操作)

sed -i ‘s/\$/\!/g’ regular.txt

sed -i ‘$a #This is a test’ regular.txt


命令实践:

[root@yubinghost~]# nl /etc/passwd | sed '2,5d'   删除2-5

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

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

    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    ..............

[root@yubinghost~]# nl /etc/passwd | sed '2a Drink tea or ......\

> drink beer?'

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

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

Drink tea or......

drink 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

我们可以新增不只一行,可以新增好几行,但是每一行之间都必须要以反斜杠 \ 来进行新行的增加

[root@yubinghost~]# nl /etc/passwd | sed '2,5c No 2-5 number'

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

No 2-5 number                 2-5替换成No2-5 number

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

    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

[root@yubinghost~]# nl /etc/passwd | sed -n '2,5p'      仅显示2-5

    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

[root@yubinghost~]#

[root@yubing ~]# nl /etc/passwd | sed '5,$d'   删除5到最后一行

   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

[root@yubing ~]#

[root@yubing ~]# nl /etc/passwd|sed '2,5c NO2-5 number'  2-5行替换成

   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

.......................................

[root@yubing ~]# nl /etc/passwd | sed -n'5,7p'    仅显示5-7

   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

[root@yubing ~]# nl /etc/passwd | sed'5,7p'     不加-n参数会显示所有行数

   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

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

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

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

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

   7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

   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  news:x:9:13:news:/etc/news:


你可能感兴趣的:(linux,sed,sed命令)