Chr*_*son 4 regex linux tags sed
我正在尝试在 Linux 系统上使用 sed 替换多行
这是我的文件
<!-- PAGE TAG -->
DATA1
DATA2
DATA3
DATA4
DATA5
DATA6
<div id="DATA"></div>
DATA8
DATA9
<!-- PAGE TAG -->
Run Code Online (Sandbox Code Playgroud)
我所做的尝试和失败!
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'
Run Code Online (Sandbox Code Playgroud)
中间的所有东西都<!-- PAGE TAG -->应该更换。
这个问题类似于 sed multiline replacement
虽然 @nhahtdh 的答案是您最初问题的正确答案,但此解决方案是对您的评论的答案:
sed '
/<!-- PAGE TAG -->/,/<!-- PAGE TAG -->/ {
1 {
s/^.*$/Replace Data/
b
}
d
}
'
Run Code Online (Sandbox Code Playgroud)
你可以这样读:
/<!-- PAGE TAG -->/,/<!-- PAGE TAG -->/-> 对于这些正则表达式之间的行
1 {-> 对于第一个匹配行
s/^.*$/Replace Data/-> 搜索任何内容并替换为Replace Data
b-> 分支到结束(在本例中行为类似于中断)
d-> 否则,删除该行
您可以通过在每个命令后添加分号来使用 gnu sed 将任何一系列 sed 命令变成单行命令(但如果您希望稍后能够阅读它,则不建议这样做):
sed '/<!-- PAGE TAG -->/,/<!-- PAGE TAG -->/ { 1 { s/^.*$/Replace Data/; b; }; d; };'
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您应该在发布的内容中尽可能具体。“替换/删除”是指“替换或删除”。如果你想更换,直接说更换即可。这有助于我们尝试回答您的问题,也有助于未来可能遇到相同问题的用户。
| 归档时间: |
|
| 查看次数: |
4527 次 |
| 最近记录: |