sed

来自百合仙子's Wiki
跳转到导航 跳转到搜索

选项

-i
修改原文件,
  • GNU 版的可选指定备份文件后缀,后缀不能作为下一个参数出现,不指定则无备份
  • FreeBSD 版必须指定备份文件后缀,参数可作为下一个参数出现
  • OpenBSD 版不支持此参数
-e
指明后面的参数是命令,可多次使用,以指定多个命令
-n, --quiet, --silent
不要输出原文

命令

s

替换文本

sed 's/src/dest/' files

在最后加个g表示全局替换,否则只替换每行的第一个匹配。

注意?就表示问号,\?才是元字符。

d

删除特定行:

sed -i '/pattern/d' files

p

打印文件 filename 中 DESCRIPTION 和 LIST 之间的内容:

sed '/DESCRIPTION/,/LIST/p' filename

G

输出空行。如:每两行之间加一空行输出

sed G file

N

载入下一行到缓冲区,如将每两行用逗号连接为一行:

sed 'N;s/\n/,/'

=

打印行号。

b

无条件跳转。不指定标签时跳转到脚本结尾。比如打印指定范畴之外的行:

xev | sed -n '/^MotionNotify/,/^$/b;p'

t

如果对当前行的上一个s命令成功,那么转到指定标签或者脚本结尾。如以下切换注释的脚本:

sed -i '/^#127\.0\.0\.1\s\+/s/^#//;t;/^127\.0\.0\.1\s\+/s/^/#/' \
  /etc/hosts

另有T命令是 GNU 的扩展,在上一个s命令失败时跳转。

:

定义标签,用于tb命令跳转。

指定范围

first~step
从第first行开始,每step行执行

FreeBSD 版

FreeBSD 版在s命令的替换字符串中不支持\n,需要使用转义过的硬换行。[1]

例子:

k="a\\
b"
sed "s|a|$k|" <<<a

参见

外部链接

参考资料