将字符串替换为包含多个换行符的句子

将字符串替换为包含多个换行符的句子

我正在尝试使用 shell 脚本将字符串替换为接触多个换行符的句子或段落。替换字符串将在运行时生成。

例如:

sed /string_to_be_replaced/Replacement(newline character) string (newline character)/g

欢迎任何意见/想法。谢谢!

答案1

使用 GNU sed

mline="this is\na line\nin multiple\nlines"
sed "s/PATTERN/${mline}/g" <<<"PATTERN here."
this is
a line
in multiple
lines here.

如果您的输入包含/特殊字符或&将匹配为模式匹配sed。使用全局模式替换//来替换/转义所有/es 并将所有模式替换为\&.

sed "s/PATTERN/${mline//\//\\/}/g; s/PATTERN/\&/" <<<"PATTERN here."

或者最好使用不同的sed分站分隔符并&再次转义。

sed "s:PATTERN:${mline//&/\\&}:g" <<<"PATTERN here."

最后,如果您希望它在实际中工作Enter,首先我们需要将所有内容替换\n\\n,让它们作为 sed 提供\n。所以

实际输入时多行输入。

mline="th&is is
a line
in mul/tiple
line/s"

命令:

aline="$(sed -z 's:\n:\\n:g;$s:\\n$::' <<<"$mline")
sed "s:PATTERN:${aline//&/\\&}:g" <<<"PATTERN here."

输出是:

th&is is
a line
in mul/tiple
line/s here.

相关内容