regex - Sed 正则表达式多行 - 替换 HTML

标签 regex linux tags sed

我正尝试在 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/

相关文章:

javascript - 用正则表达式替换第 n 个匹配项

regex - Perl,将标量与数组进行比较(使用正则表达式?)

java - Linux下用Java写的如何创建带空格的文件夹?

php - Cron Job 命令不起作用

java - 如何使用 RegExp 替换除双引号之外的所有标点符号

linux - 如何单独存储每个 xargs 实例的输出

python - 如何使用 python 显示和标记图像的区域

php - 寻找标签系统的起点

javascript - 只获取有多个父元素的 DOM 元素

java - String.matches 不匹配模式