使用包含模式的变量进行Printf模式匹配

时间:2018-05-25 14:47:22

标签: bash pattern-matching printf

在最初创建脚本之前看了一下stackoverflow和其他人之后,我发现printf的使用完全(或者我认为)我需要的东西:

printf '%s\n' '$+?multi_pack?a' "$content" .x | ex $log_output

这是我脚本中出现的内容。我知道它的结果是什么,大致如何使用printf。这行是在使用ex文本编辑器最后一次出现模式'multi_pack'之后添加字符串$content(这是一个命令扩展content="$(cat $temp_file_2)",其中temp_file_2包含我需要附加的文本)。它需要是最后一次出现,因为正在生成日志文件(通过循环)时发生追加,并且可能发生模式的多次出现,但我只对最后一次出现模式感兴趣,因此附加了模式每次出现时的相关文本(会发生变化)(反过来会与上次循环匹配的最后一个模式有所不同)。

我正在尝试解决的是如何修改printf命令,使得模式是一个变量,并在需要时进行更改(这会使文本的位置附加更改)....

我尝试过类似的事情:

printf '%s\n' "$+?${my_new_variable}?a" "$content" . x | ex $log_output

printf '%s\n' "$+?$my_new_variable?a" "$content" . x | ex $log_output

并且输出不是我期望的......

修改

Barmar的答案就是我所需要的。我想问的问题是“我这样做了吗?”帮助我找出导致输出不起作用的原因(正如我在Chepner的编辑之前所解释的那样,甚至可能没有这行代码 - 如果它确实是正确的)。 Printf是一种红色的鲱鱼,Ex正在进行模式匹配。

1 个答案:

答案 0 :(得分:1)

printf似乎没必要,请使用here-doc:

ex $log_output <<EOF
$+?${my_new_variable}?a
$content
.
x
EOF

你不太可能以这种方式错误地换行。