我正尝试在 Linux 系统上使用 sed 替换多行
这是我的文件
<!-- PAGE TAG -->
DATA1
DATA2
DATA3
DATA4
DATA5
DATA6
<div id="DATA"></div>
DATA8
DATA9
<!-- PAGE TAG -->
我做过和失败的尝试!
sed -n '1h;1!H;${;g;s/<!-- PAGE TAG -->.*<!-- PAGE TAG -->//g;p;}'
sed -n '1!N; s/<!-- PAGE TAG -->.*<!-- PAGE TAG -->// p'
sed -i 's|<!--[^>]*-->[^+]+<!--[^>]*-->||g'
sed -i 's|/\/\/<!-- PAGE TA -->/,/\/\/<!-- PAGE TA -->||g'
<!-- PAGE TAG -->
之间的所有内容应该更换。
这个问题类似 sed multiline replace
最佳答案
虽然@nhahtdh 的回答对于您的原始问题是正确的,但此解决方案是对您的评论的回答:
sed '
/<!-- PAGE TAG -->/,/<!-- PAGE TAG -->/ {
1 {
s/^.*$/Replace Data/
b
}
d
}
'
你可以这样读:
/<!-- PAGE TAG -->/,/<!-- PAGE TAG -->/
-> 对于这些正则表达式之间的行
1 {
-> 对于第一个匹配行
s/^.*$/Replace Data/
-> 搜索任何内容并替换为 Replace Data
b
-> 分支到结束(在这种情况下表现得像 break)
d
-> 否则,删除该行
通过在每个命令后添加分号,您可以使用 gnu sed 将任何一系列 sed 命令变成单行代码(但如果您希望以后能够阅读它,则不推荐这样做):
sed '/<!-- PAGE TAG -->/,/<!-- PAGE TAG -->/ { 1 { s/^.*$/Replace Data/; b; }; d; };'
作为旁注,您真的应该尝试在您的帖子中尽可能具体。 “替换/移除”是指“替换或移除”。如果你想更换它,就说更换。这对我们这些试图回答您的问题的人以及可能遇到相同问题的 future 用户都有帮助。
关于regex - Sed 正则表达式多行 - 替换 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043363/