sed,逗号,美元符号,单引号和双引号

时间:2018-01-10 09:29:12

标签: regex linux shell unix sed

问题很复杂,但我希望答案很简单,因为我忽视了一些事情。

我想做的是,我试图使用" sed"命令从文件中获取匹配行以来的所有行。

我发现以下命令适用于我的目的:

sed -n '/\[ ocsp \]/,$p' openssl.cnf

但是,我希望将匹配的单词作为变量传入。因此,我需要将引用从单引号更改为双引号。

它没有像我预期的那样工作!

我的理解是,逗号和美元符号告诉sd命令从匹配点打印到文件结尾。我在这里看不到任何有趣的东西。但是,在我更改为双引号后,我收到如下错误消息:

sed: -e expression #1, char 19: unexpected `,'

我试图逃避或将模式匹配到{}符号后放入命令等。没有任何作用。

请在这里寻求帮助。

1 个答案:

答案 0 :(得分:0)

内部双引号bash将$var扩展为var的值。在单引号内,bash不会以这种方式解释美元符号。因此,如果您更改了引号,则$p被扩展为(可能)空值并且会出错。只需在上一个$之前添加单个baskslash。

sed -n "/\\[ ocsp \\]/,\$p" openssl.cnf