我正在传递给 sed 来替换文本,该文本似乎包含一些它不喜欢的字符。
文本来自git log graph
并且类似于:
ID- desc author
ID- desc author
我明白了unescaped newline inside substitute pattern
如何在通过管道传输到 sed 之前转义所有内容?
Example:
COMMIT=$(git log my_branch...origin/master --pretty=format:'%h %an')
FINAL=$(cat msg.txt | sed -E "s/--PLACEHOLDER--/$COMMIT/)
答案1
您可以通过简单的 bash 参数替换来完成此操作:
msg=$(< msg.txt)
# or, for this demo
msg="This is the commit message.
--PLACEHOLDER--
That's it."
commit="id1 - message 1
id2 - message 2
id3 - message 3"
final="${msg//--PLACEHOLDER--/"$commit"}"
echo "$final"
This is the commit message.
id1 - message 1
id2 - message 2
id3 - message 3
That's it.