sed
跳转到导航
跳转到搜索
选项
-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
命令失败时跳转。
:
定义标签,用于t
和b
命令跳转。
指定范围
first~step
- 从第first行开始,每step行执行
FreeBSD 版
FreeBSD 版在s
命令的替换字符串中不支持\n
,需要使用转义过的硬换行。[1]
例子:
k="a\\
b"
sed "s|a|$k|" <<<a
参见
外部链接
- Sed by example, Part 1
- SED单行脚本快速参考(有多语种版)
- Frequently-Asked Questions about sed, the stream editor
- sed 简明教程 | 酷壳 - CoolShell.cn