前言
s e d是一种重要的文本过滤工具,或者使用一行命令或者使用管道与
g r e p与a w k相结合。
s e d 读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。重复此过程直到命令结束。
表达式
调用s e d有三种方式:
在命令行键入命令
sed [选项] s e d命令 输入文件。
记住在命令行使用s e d命令时,实际命令要加单引号。 s e d也允许加双引号。
将 s e d命令插入脚本文件,然后调用 s e d
sed [选项] -f sed脚本文件 输入文件
将s e d命令插入脚本文件,并使s e d脚本可执行
s e d脚本文件 [选项] 输入文件
s e d选项如下:
- n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以用来打印编辑行。
- c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条 s e d命令,此选项无用,但指定它也没有关系。
- f 如果正在调用s e d脚本文件,使用此选项。
s e d浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
- 使用行号,可以是一个简单数字,或是一个行号范围。
- 使用正则表达式
使用sed在文件中查询文本的方式
s e d浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
- 使用行号,可以是一个简单数字,或是一个行号范围。
- 使用正则表达式
sed 基本编辑命令
1 | p 打印匹配行 |
p 输出
打印第二行:
sed -n ‘2p’ data.f
可以指定行的范围,现打印 1到3行:
sed -n ‘1,3p’ data.f
匹配单词 N e a v e:
sed -n ‘/Neave/‘p data.f
匹配元字符$,必须使用反斜线\屏蔽其特殊含义:
sed -n ‘/$/‘p data.f
显示整个文件,$代表最后一行:
sed -n ‘1,$p’ data.f
显示行号
要打印行号,使用等号=。打印模式匹配的行号,使用格式 / p a t t e r n / =。
sed -n -e ‘/build/=’ data.f
显示行号和匹配内容,必须使用两个 s e d命令,并使用 e选项。第一个命令打印模式匹配行,第二个使用=选项打印行号,格式为sed -n -e /pattern/p -e /pattern/=。
sed -n -e ‘/build/p’ -e ‘/build/=’ data.f
d 删除
s e d删除文本格式:
[ a d d r e s s [,a d d r e s s ] ] d
1 | 2d sed '2d' 1.txt 删除1.txt的第二行 |
s 替换
替换命令用替换模式替换指定模式,格式为:
[ a d d r e s s [,address]] s/ pattern-to-find /replacement-pattern/[g p w n]
s 选项通知s e d这是一个替换操作,并查询 p a t t e r n - t o - f i n d,成功后用r e p l a c e m e n t - p a t t e r n替
换它。
替换选项如下:
- g 缺省情况下只替换第一次出现模式,使用 g选项替换全局所有出现模式。
- p 缺省s e d将所有被替换行写入标准输出,加 p选项将使- n选项无效。- n选项不打印输出
结果。 - w 文件名 使用此选项将输出定向到一个文件。
1 | sed 's/old/new/' 1.txt 删除1.txt中每行的第一个old都替换成new |
r 读文本
s e d允许从另一个文件中读文本,并将其文本附加在当前文件。此命令放在模式匹配行后,格式为:
address r filename
将 sedex.txt 内容附加到文件 quote.txt 的拷贝。
在模式匹配行 /company/ 后放置附加文本。
sed ‘/company./r sedex.txt’ quote.txt
i/a/c插入
1 | i sed '2i123' 1.txt 在1.txt的第二行前面插入123 |