【问题标题】:Need to use double code and pass variable in sed command需要在 sed 命令中使用双码并传递变量
【发布时间】:2019-05-27 13:57:23
【问题描述】:

需要通过双码(")和变量的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`

当我在脚本中运行时没有给我任何输出。

我期待输出:109

【问题讨论】:

    标签: bash unix


    【解决方案1】:

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

    您需要使用sed -E 使括号对分组起作用(或者在正常模式下,您必须转义每个括号)。 (注意sed-E 选项不是posix 标准的一部分)

    此外,如 cmets 中所述,变量不会在单引号内扩展/插值。如果你在一个单引号块中,在变量之前终止它并在变量之后开始另一个块。

    以下应该可以解决以上所有问题,并且应该可以解决您的问题。

    req_data="$(sed -En 's%.*confirmation ID=\\"'$variable'-(.+)\\" status.*%\1%p' /tmp/log)"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-16
      • 2017-12-15
      • 2019-09-11
      • 1970-01-01
      • 2016-12-23
      • 2020-07-01
      • 2012-06-24
      相关资源
      最近更新 更多