【问题标题】:Sed to awk program convertsed 到 awk 程序转换
【发布时间】:2015-06-01 13:45:06
【问题描述】:
1 h
2~1 H
$ {
    g
    s/<!--([^-]|-[^-]|--+[^->])*-+->|<[^>]*>//g
    s/\&quot;/"/g
    s/\&amp;/\&/g
    s/\&lt;/</g
    s/\&gt;/>/g
    p
}

此 SED 代码从 HTML 文件中删除所有标签和 cmets,但我如何在 AWK 上编写相同的代码? 请帮忙

【问题讨论】:

  • 您正在使用 sed 解析 HTML 文件,现在您希望 我们awk 中执行相同的操作。改用合适的解析器怎么样?
  • 将所有s///g 命令更改为gensub,将s/// 更改为gsub。只需将它放在一对花括号之间并运行它。在$0 上应用 subs 并输出它们。
  • 这是 OP 努力的提示,而不是答案。
  • @ShellFish gsub 不等同于 s///
  • 你是对的,感谢您指出这一点。 -- 正如User112638726Kent指出的那样,应该是subgsub

标签: html awk sed tags


【解决方案1】:

这是一个 awk one 班轮,和你给定的 sed 做同样的事情:

  • 将整个文件加载到内存中
  • 用与你写的s/pat/rep/g -&gt; gsub("pat","rep")相同的逻辑替换

    awk -v RS="\0" '{gsub("<!--([^-]|-[^-]|--+[^->])*-+->|<[^>]*>","")
        gsub("&quot;","\"") 
        gsub("&amp;","&") 
        gsub("&lt;","<") 
        gsub("&gt;",">")}7' your.html
    

我做了一个例子,用你上面的 sed 和 awk 命令测试一下:

kent$  cat x.html 
<html>

        <!-- foo bar-->
        <something>
        ok, here I am the &lt;text      &gt;
        <!--foo 
         <IamTheTagInComment/>
        -->
        <emptyTag/>

         <foo>bar</foo>
         <hello> Hi &quot; Ladies &amp; Gentleman &quot;</hello>
        </something>
</html>

kent$  sed -nrf x.sed x.html                                             




        ok, here I am the <text >



         bar
          Hi " Ladies & Gentleman "



kent$  awk -v RS="\0" '{gsub("<!--([^-]|-[^-]|--+[^->])*-+->|<[^>]*>","")
        gsub("&quot;","\"") 
        gsub("&amp;","&") 
        gsub("&lt;","<") 
        gsub("&gt;",">")}7' x.html




        ok, here I am the <text >



         bar
          Hi " Ladies &amp; Gentleman "

附: 处理 html 的最佳方式是使用解析器。例如。 beautifulsoup 非常好用且易于使用。

【讨论】:

  • @Neo9514 它使 awk 将整个文件加载为“行”
  • 它解决了你的问题吗,@Neo9514?由于您是新来的,如果您的问题已经解决,请不要忘记将答案标记为已接受。您可以单击答案旁边的复选标记将其从空心切换为绿色。如有任何问题,请参阅Help Center > Asking
  • gsub("&amp;gt;","&gt;")}7 为什么是七个? @肯特
  • @Neo9514 你可以写任何非零数字,右手食指对我来说更容易。所以我拿了 7 个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
相关资源
最近更新 更多