加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Sed regexp multiline – 替换HTML

发布时间:2020-12-14 00:28:23 所属栏目:Linux 来源:网络整理
导读:我试图在 Linux系统上使用sed替换多行 这是我的档案 !-- PAGE TAG --DATA1DATA2DATA3DATA4DATA5DATA6div id="DATA"/divDATA8DATA9!-- PAGE TAG -- 我的尝试和失败! sed -n '1h;1!H;${;g;s/!-- PAGE TAG --.*!-- PAGE TAG --//g;p;}' sed -n '1!N; s/!-- PAG
我试图在 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 /^.*$/替换数据/ – >搜索任何内容并替换为替换数据

b – >分支结束(在这个例子中表现得像破坏)

d – >否则,删除该行

您可以通过在每个命令后添加分号将任何系列的sed命令组合成单行使用gnu sed(但如果您希望以后能够读取它,则不建议使用分号):

sed '/<!-- PAGE TAG -->/,/<!-- PAGE TAG -->/ { 1 { s/^.*$/Replace Data/; b; }; d; };'

作为旁注,您应该尽量在发布中尽可能具体. “替换/删除”表示“替换或删除”.如果你想要它被替换,只需说替换.这有助于我们这些尝试回答您问题的人以及可能遇到同样问题的未来用户.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读