【问题标题】:Using sed or awk to select使用 sed 或 awk 进行选择
【发布时间】:2017-07-21 11:34:14
【问题描述】:

我正在尝试选择 html 文件中两个标记之间的行。我尝试过使用 sed 和 awk,但我认为我转义某些字符的方式存在问题。我见过一些类似的问题和答案,但给出的例子很简单,没有特殊字符。我认为我的逃跑是问题所在。我需要之间的界限

<div class="bread crumb">

</div>

块内没有其他div,块内有多行。

我是否需要如下转义字符<>?

sed -n -e '/^\<div class=\"bread crumb\"\>$/,/^\<\/div\>$/{ /^\<div class=\"bread crumb\">$/d; /^\<\/div>$/d; p; }'

我的 awk 尝试:

awk '/\<div class=\"bread crumb\"\>/{flag=1;next}/\<\/div\>/{flag=0}flag'

【问题讨论】:

  • 虽然sedawk 可能能够完成某些输入的工作,但使用非HTML 感知工具来解析HTML 被认为是不好的做法。你应该看看xpath,这是一个解析HTML/XML文件的专用工具
  • 发布初始 html 片段和预期结果

标签: bash awk sed escaping


【解决方案1】:

其实你只需要在&lt;/div&gt;中转义/,休息就好了..

sed -n '/<div class="bread crumb">/,/<\/div>/{//!p}' 

【讨论】:

    【解决方案2】:

    您应该为该工作使用 html 解析器。

    如果您仍想使用 sed 执行此操作,请不要转义用于 word boundary&lt;&gt;

    试试这个:

    sed -ne '/<div class="bread crumb">/,/<\/div>/{//!p;}' file
    

    //!p 部分输出除了与地址模式匹配的行之外的所有块。

    【讨论】:

      【解决方案3】:

      只需在 awk 中使用字符串匹配:

      awk '$0=="</div>"{f=0} f{print} $0=="<div class=\"bread crumb\">"{f=1} ' file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 2011-04-07
        • 1970-01-01
        • 2012-11-30
        • 1970-01-01
        • 2017-04-23
        • 2022-11-10
        相关资源
        最近更新 更多