我正在尝试使用 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.