在最初创建脚本之前看了一下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正在进行模式匹配。
答案 0 :(得分:1)
printf
似乎没必要,请使用here-doc:
ex $log_output <<EOF
$+?${my_new_variable}?a
$content
.
x
EOF
你不太可能以这种方式错误地换行。