【问题标题】:Delete strings from an html file containing a pattern using unix commands使用 unix 命令从包含模式的 html 文件中删除字符串
【发布时间】:2017-01-04 00:28:25
【问题描述】:

我的 html 看起来像这样:

<div id=":0.page.0" class="page-element" style="width: 1620px;">
 <div>
  <img src="viewer_files/viewer_004.png" class="page-image" style="width: 800px; height: 1131px; display: none;">
  <img src="viewer_files/viewer_005.png" class="page-image" style="width: 1600px;">
 </div>
</div>// this repeats 100+ times with different 'src' attributes

现在这实际上是一行(为了便于阅读,我已将其格式化为多行)。我正在尝试删除在内联css中设置了display:none;的所有&lt;img&gt;标签。是否可以使用 sed/awk 或其他一些 unix 命令来实现这一点?我认为如果它是一个缩进良好的 html 文档,那就很容易了。

【问题讨论】:

    标签: unix shell sed awk


    【解决方案1】:

    HTML 和正则表达式是出了名的糟糕匹配,所以你可能想要一些 HTML 感知的东西。我可能会选择 TagSoup 之类的东西,但毫无疑问,其他选项更适合 shell,或者适用于您可能拥有的任何喜欢的脚本语言。

    【讨论】:

      【解决方案2】:

      我会使用TwigXMLStarlet 来进行这种处理。比 sed/awk/grep 可靠得多。由于您的模式是常规且重复的,因此它们也可以使用。

      【讨论】:

      • +1 喜欢 xmlstarlet,就像我喜欢任何与 XML 相关的东西一样。
      【解决方案3】:
      sed 's/<img.*display: none;[^>]>//g' file
      

      【讨论】:

        【解决方案4】:
        sed -e "s/<img[^>]*display: none;[^>]*>//g" filein
        

        关于 sed 的简要说明:

        s 代表替换 / 是分隔符

        s 表示第一个字段将是要搜索的模式,它将被第二个替换。最后一个是选项。 g 表示全局(如果找到许多匹配项,请多次替换)。

        就地替换:sed -i -e "..."

        【讨论】:

        • 应该是display: *none\b 而不是display: none;
        • @Pumbaa80 有什么区别?
        • 匹配零个或多个空格,而不是正好一个。
        • 另外,它匹配 "display: none""display: none ;"
        【解决方案5】:

        这样就可以了

        sed -e "s@<img.*display: none;.*>@@g" FILINAME
        

        【讨论】:

        • 第二个.*不是要贪婪匹配吗?
        • 它删除了所有的 img 标签:|
        • 嗯,它确实适用于原始样本。但是,如果贪婪是一个问题,我们总是可以替换 .与 [^>]
        • 你确定吗?我刚刚用你的文件试了一下。像魅力一样工作。
        【解决方案6】:

        Sed 有几个命令,但大多数人只学习替代命令:“s”。 一个有用的命令会删除与限制匹配的每一行:“d”。

        sed -e "/<img[^>]*display: none;[^>]*>/d" File 
        

        小心删除整行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-26
          • 2015-11-10
          • 2021-05-26
          • 1970-01-01
          • 1970-01-01
          • 2021-08-09
          相关资源
          最近更新 更多