SED命令

命令格式

1
sed [-nefri] 'command' input_file #注意,是单引号

常用选项:

选项 用法
-n 使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的资料一般都会被列出到萤幕上。但如果加上该 参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。
-e 直接在指令列模式上进行 sed 的动作编辑
-f 直接将 sed 的动作写在一个档案内,-f filename 则可以执行filename内的sed动作
-r sed的动作支援的是延伸型正则表示法的语法。
-i 直接修改读取的档案内容,而不是由萤幕输出。

常用命令

命令 含义
a 新增,a的后面可以接字串,而这些字串会在新的一行出现(当前行的下一行)
c 取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行
d 删除,d后面通常不接任何内容
i 插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p 列印,亦即将某个选择的资料印出。通常p会与参数-n选项一起运作
s 取代,通常这个 s 的动作可以搭配正规表示法

实例

假设当前目录下要操作的文件名为test:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
删除
$ sed '15d' test #删除15行内容
$ sed '$d' test #删除最后一行
$ sed '1,2d' test #删除第一行到第二行,
$ sed '2,$d' test #删除第二行到最后一行
$ sed '/My/,10d' datafile #删除包含"My"的行到第10行
显示
$ sed -n '1p' test #显示第一行
$ sed -n '$p' test #显示最后一行
$ sed -n '1,2p' test #显示第一行和第二行,包含关系,即[1,2]f非(1,2]
$ sed -n '2,$p' test #显示第二行到最后一行
查询
$ sed -n '/root/p' test #查询包括关键字root所在所有行
$ sed -n '/\$/p' test #查询包括关键字$所在所有行,使用反斜线转义
增加
$ sed '1a something' test #第一行后增加字符串something,注意前面有空格
$ sed '1,3a something' test #第一行到第三行每行后都增加字符串something
$ sed '1a something\nor anothor' test #使用换行符\n追加多行
替代
$ sed '1c Hi' test #第一行代替为Hi
$ sed '1,2c Hi' test #第一行到第二行的内容用Hi替代,即两行的内容现为一行
$ sed 's/ruby/bird/g' test #替换ruby为bird,会替换所有
插入
$ sed -i '1a bye' test #在文件test中第一行后插入直接输入"bye",会写入文件
$ sed -i '/matched_string/d' test #删除匹配行,也就是说/matched_string/匹配结果是一整行
$ sed -i '/matchedstring/s/source_string/changed_string/g' test #替换匹配行字串