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 参数实现,后面的内容和修改部分的内容一样。