两个看似相同的sed命令,一个工作,另一个没有。你能告诉我为什么吗?

时间:2015-10-28 18:48:47

标签: regex linux bash sed

我有一些关于sed行为的理解有些困难。

sed: -e expression n°1, caractère 10: `,' inattendue

给出以下错误

sed -n '/pattern/,$p' < input.inp > output.out

(我的系统是法语)。

sed -n "/begin/,/end/p" < input.inp > output.out

工作正常

我个人使用了像

这样的命令
{{1}}

带有单引号或双引号,它们工作正常。

如果它有用,我有sed版本:sed(GNU sed)4.2.2

1 个答案:

答案 0 :(得分:3)

在双引号中,shell(不是sed)将评估$p。由于您可能无法设置名为p的变量,因此sed只会看到/pattern/,。为了防止这种情况发生,您需要通过编写$来转义\$到shell:

sed -n "/pattern/,\$p" < input.inp > output.out

(你可以想象,除非你的表达中需要shell变量,否则在眼睛和大脑上使用单引号要容易得多。)