在管道传输到 sed 之前转义文本

在管道传输到 sed 之前转义文本

我正在传递给 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.

相关内容