Sed通过多行代码替换

我是新手使用sed但我一直在试验sed的s/..../..../ (替代)修改一个完整的句子,如果它在一行但我不知道如何修改一个句子的替代解决方案可能已分为两行,例如:

这个:

 Lorem Ipsum is simply dummy text of the printing and typesetting industry. 

实际上是这样写的:

 Lorem Ipsum is simply dummy text of the printing and typesetting industry. 

你如何检测这个或编码它来替换整个句子,即使它是在两行而不是一行?

以下命令适用于以下两种情况:

 sed '/Lorem.*/ {N; s/Lorem.*industry\./string to replace/g}' filename 

更多解释: 如何使用sed替换多行字符串?

虽然sed可以匹配多行上的模式(使用命令NH在匹配之前附加连续的行),但这远远超出其舒适区。 只有当你喜欢疼痛时才尝试它。

Perl可以很好地完成这类工作。 使用-p开关使其一次处理标准输入一条记录并打印修改后的记录(例如)和-000以打开段落模式(其中记录用空行分隔)。 在正则表达式中, \s匹配任何包含换行符的空格字符。

 perl -p -000 -e 's/Lorem\s+Ipsum\s+is\s+simply\s+dummy\s+text\s+of\s+the\s+printing\s+and\s+typesetting\s+industry\./Replacement text/g' 

如果您想在原始包含替换文本时在替换文本中添加换行符,那就更复杂了。 如何做到这一点取决于你对新线的放置位置的要求。

sed不能轻易读取多行。 请改用perl -i -0pe 's/.../.../...'