regex - 使用sed用多行替换一个单词?

标签 regex bash sed replace

我正在开发一个 bash 脚本,它必须准备一封电子邮件以发送给用户。

它聚合了一些数据,最终变成了多行内容。对于存储在 $DATA 中的示例。

现在,经过一些 stfw 我发现了一些东西,比如 sed -ei "s/_data_/${DATA}/g"mail.tplsed 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/

相关文章:

linux - 使用 sed/awk 按列修改文本

bash - 替换行之间的模式

r - R 中的这个正则表达式模式有什么问题?

python - 在 Python 中使用正则表达式获得和平的数字

regex - 用于提取 URL 的字母数字部分的正则表达式?

bash - Unix: “ls” 命令显示带有 ?延期后

linux - 带有特殊字符的 sed

regex - 使用 grep regex 选择第一个连字符

python - 通过转义必要的东西将 shell 脚本转换为一个衬里?

c - 分解shell脚本;引擎盖下会发生什么?