sed on mac:'p命令后的额外字符'

时间:2016-09-05 07:34:50

标签: regex macos sed

在Linux上我使用它来获取[test]行之后的下两行:

sed -n '/\[test\]/{n;p;n;p}' my-file

在Mac上我得到:

sed: 1: "/\\[test\\]/{n;p;n;p}": extra characters at the end of p command.

是否有适用于两个平台或Mac的表达式,必须使用完全不同的命令?

3 个答案:

答案 0 :(得分:7)

在最后p

之后添加一个额外的分号
 sed -n '/\[test\]/{n;p;n;p;}' my-file

(与Mac版本无关,在MSYS上也失败)

答案 1 :(得分:3)

OSX(BSD)sed需要;或单独一行终止每个命令。

所以这应该有效:

sed -n '/\[test\]/{n;p;n;p;}' my-file

甚至这个都可行:

sed -n '/\[test\]/{
n
p
n
p
}' my-file

答案 2 :(得分:1)

另外,如果在使用-i选项且不带扩展名时碰巧遇到此错误:

> sed -i 's/foo/bar/g' file
sed: 1: "file": extra characters at the end of p command

在这种情况下,解决方案是将扩展名显式设置为空字符串:

> sed -i '' 's/foo/bar/g' file