linux命令之sed

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

用法:

[root@www ~]# sed [-nefr] [动作]

参数:

-n:使用安静模式。在一般sed的用法中,所有来自STDIN 的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的哪一行才会被列出来;

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

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

-r:sed 的动作支持的是扩展型正则表达式的语法。

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

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

n1,n2:不见得会存在,一般代表选择进行动作的行数;举例来说如果我的动作是需要在10到20行之间进行的,则 ‘10,20[动作行为]’

function 有下面这些参数:

a:新增,a 的后面可以接字符串,而这些字符串会在新的一行出现;

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

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

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

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

s:替换,可以直接进行替换的工作。

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

范例一:将/etc/passwd 的前十行内容列出来并且打印行号,同时,请将第 2~5行删除

[root@www ~]# nl /etc/passwd | head -n 10 | tail -n 10 | sed '2,5d'

具体内容省略。

范例二:承上例,在第二行后加上“drink tea”字样

[root@www ~]# nl /etc/passwd | head -n 10 | tail -n 10 | sed '2a drink tea'

具体内容省略

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

范例三:将第二至第五行的内容替换成为“No 2-5 number”

[root@www ~]# nl /etc/passwd | head -n 10 | tail -n 10 | sed '2,5c No 2-5 number'

具体内容省略

范例四:仅列出 /etc/passwd 文件内的第5-7行(前面我们一直都有如此做,这是另一种方法)

[root@www ~]# nl /etc/passwd | sed -n '5,7p'

具体内容省略

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

除了整行的处理模式之外,sed还可以用行为单位进行部分数据的查找并替换的功能。基本上sed 的查找与替换的与vi 相当类似,它有点像这样:

sed 's/要被替换的字符串/新的字符串/g'

上面特殊字体的部分为关键字,请记下来!

范例:

利用 /sbin/ifconfig 查询 IP,再利用关键字grep 选取出关键的一行数据

[root@www ~]#  /sbin/ifconfig  | grep 'inet addr'

        inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

将IP前面的部分予以删除

[root@www ~]# /sbin/ifconfig | grep 'inet addr' | sed 's/^.*addr://g'

192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

与上面对比,前面部分少了

直接修改文件的内容

sed甚至可以直接修改文件的内容,而不必使用管道命令或数据流重定向。不过,这个命令会直接修改文件,所以不要随便拿系统文件来试验。通过 -i 参数实现,后面的内容和修改部分的内容一样。

猜你喜欢

转载自blog.csdn.net/godop/article/details/80062494