需要在sed命令中使用双重代码并传递变量

时间:2019-05-27 13:57:24

标签: bash unix

搜索模式并使用带有双代码(“)和变量的SED显示。

实际日志为:

<confirmation ID="123456-109" status>

想要打印109

这与实际的sed命令一起起作用:

sed -n 's%.*confirmation="123456-\(.*\)" status.*%\%p' /tmp/log

输出:109

但是当我尝试在将123456作为变量传递的脚本中使用此命令时,它将无法正常工作。

req_data=`sed -n 's%.*confirmation="$variable-\(.*\)" status.*%\%p' /tmp/log`

当我在Script中运行时,没有提供任何输出。

我希望输出:109

1 个答案:

答案 0 :(得分:0)

执行一个command并将其输出作为res分配给变量res="$(command)"

您需要使用sed -E来使括号适用于分组(或在正常模式下,必须转义每个括号)。 (请注意,-E的{​​{1}}选项不是sed标准的一部分)

此外,如注释中所述,变量不会在单引号内展开/插入。如果您用单引号引起来,请在变量之前将其终止,并在变量之后开始另一个模块。

以下应解决所有上述问题,并应解决您的问题。

posix