我正在开发一个 bash 脚本,它必须准备一封电子邮件以发送给用户。
它聚合了一些数据,最终变成了多行内容。对于存储在 $DATA
中的示例。
现在,经过一些 stfw 我发现了一些东西,比如 sed -ei "s/_data_/${DATA}/g"mail.tpl
和 sed replace with variable with multiple lines .它们都不起作用。
现在的问题是,如何让 sed
替换具有多行文本的内容?
(也欢迎使用 sed
的替代品!)
最佳答案
您可以使用 AWK 使用变量替换来做到这一点。我们可以使用 -v
在 AWK 中设置一个变量,然后使用 AWK 的 gsub
函数用该变量替换所有出现的正则表达式。
例如,如果文件 test
具有以下内容......
foo
bar
blah _data_and_data_
foo
_data_ foobar _data_ again
... 并且 Bash 变量 $DATA
是 ...
1
2
3
4
5
... 然后 awk -v r=$DATA '{gsub(/_data_/,r)}1' test
替换所有出现的正则表达式 _data_
包含 $DATA
内容的文件 test
,结果如下:
foo
bar
blah 1
2
3
4
5and1
2
3
4
5
foo
1
2
3
4
5 foobar 1
2
3
4
5 again
关于regex - 使用sed用多行替换一个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10107459/