一、前言
sed命令本身是一个管道命令,可以分析标准的input流,而且还可以将数据进行替换、删除、修改选取特定行等功能,我们先了解一些sed的用法,再来看看它的用途吧!
二、基本语法
sed -[参数] [动作]
- 【参数】含义:
-n :使用安静模式,在一般sed的用法中,所有来自stand input的数据都会被列出到屏幕上,但如果加上-n参数后,则只经过sed特殊处理的那一行才会被列出来。
-e :直接在命令行模式上进行sed的动作编辑。
-f :直接将sed的动作卸载一个文件内,-f filename则可以执行finame内的sed动作。
-r :sed的动作支持的是扩展型正则表达式的语法(默认是基础正则表达式语法)。
-i :直接修改读取的文件内容,而不是由屏幕输出。
- 【动作】说明:[n1] [,n2] function
- 【n1, n2】:不见得会使用,表示选择进行的行数,举例来说,如果我的动作再10,20行之间,则 “
10, 20[function]
” 。- 【function】的参数:
a : 新增,a的后面可以跟字符串,而这些字符串将会出现在下一行
i :插入,i的后面可以跟字符串,而这些字符串将会出现再上一行
c:替换,c后面的以跟字符串,这些字符串会替换n1,n2之间的行!
d:删除,d后面无需跟参数,删除n1,n2之间的行
p:打印,打印某一个选择的数据,通常与参数-n一起使用
s:替换,可以直接进行替换的工作,格式例如:1,20s/old/new/g
三、实际应用
- 新增和删除
- 删除 /etc/passwd的第2~5行:
nl /ect/passwd | sed '2,5d'
- 在第2行后加上 “what is this?” 字样:
nl /etc/passwd | sed '2a what is this?'
- 在第2行前加上 “are u kidding?” 字样:
nl /etc/passwd | sed '2i are u kidding?'
- 行替换与显示
- 将2~5行的内容替换为 “ oh my god ” 字样:
nl /etc/passwd | sed '2,5c oh my god'
- 仅列出文件的5~7行:
nl /etc/passed | sed -n '5,7p'
-
部分数据的查找和替换 (
s/原来的字符串/被替换的字符串/g
)
将文件中以MAN开头的数据删除:
cat /etc/man.config | grep 'MAN' | sed 's/#.*$//g | sed '/^$/d''
- 直接修改文件内容
- 将test.txt文件每一行末尾的 ' . ' 换成 ' ! ' :
sed -i 's/\.$/\!/g' test.txt
- 在test.txt文件的末尾加入“# this is niubility!”:
sed -i '$a # this is niubility!' test.txt
四、结语
总之,sed命令是很不错的,很多shell script都会使用这个命令。大家有什么见解可以提出来,一起来分享一下!