【问题标题】:sed multiline pygmentizesed 多行 pygmentize
【发布时间】:2012-03-26 22:42:58
【问题描述】:

我想获取 html 片段并将其传递给 pygmentize 以相应地对其进行着色。我想知道如何使用 sed 或其他一些 cli 工具来完成这项工作。

我尝试了一堆 sed one-liners 并尝试使用以下 SO 问题:

我有以下日志:

2012-03-26 18:04:27,385 9372 [main] ERROR web.commons.exception.ServiceInvocationException  - 
Response from server cannot be decoded to JSON, responsePayload = <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 404 Not Found</title>
</head>
<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing jetty-url. Reason:
<pre>    Not Found</pre></p><hr /><i><small>Powered by Jetty://</small></i><br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>

</body>
</html>

org.codehaus.jackson.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: java.io.StringReader@369133f6; line: 1, column: 2]

更新我将其添加到更长的命令中:

mvn -U test | (while read line; do echo ${line} | sed -e "s/.*ERROR.*/`echo -e '\e[91m&\e[0m'`/g" -e "s/.*\(WARN|INFO\).*/`echo -e '\e[93m&\e[0m'`/g"; done)

【问题讨论】:

    标签: sed command-line-interface


    【解决方案1】:

    猫日志 | awk '//,//'

    应该这样做。

    要删除第一个 html 标记之前的“废话”,请使用 sed 将 html 标记放在它自己的行上。

    猫日志 | sed 's//\n/' | awk '//,//'

    【讨论】:

    • 您需要转义 END 模式中的“/”。此外,鉴于用户的示例输入,我认为您的解决方案将包括非 html 文本,该文本位于看起来在同一行的开头 &lt;html&gt; 之前。祝大家好运。
    • 嗯。那很奇怪。在预览逃生节目。在最后的答案中,它没有!
    • 嘿,这很酷,但仍然有第一行的输入,它将成为更长命令的一部分。尽管您的回答仍然非常有帮助,但这可能有点矫枉过正。如果太多,我可能会创建一个 python 程序来提供一些帮助。
    • 我将对其进行编辑以处理起始位。待机(周二早上很有趣;-)
    【解决方案2】:

    TXR:

    出于说明目的,我们将pygmentize 替换为将 HTML 中的每个字母都替换为 X 的命令。

    @;; replace with .e.g. pygmentize
    @(bind filter "tr [A-Za-z] X")
    @date @time @pid [@function] @error_1
    @error_2 <html>
    @(collect)
    @stuff
    @(last)
    </html>
    @(end)
    
    @error_3
    @(output)
    @date @time @pid [@function] @error_1
    @error_2
    @(end)
    @(output `!@filter`)
    <html>
    @{stuff "\n"}
    </html>
    @(end)
    @(output)
    @error_3
    @(end)
    

    试运行:

    $ txr  log.txr  log.txt
    2012-03-26 18:04:27,385 9372 [main] ERROR web.commons.exception.ServiceInvocationException  -
    Response from server cannot be decoded to JSON, responsePayload =
    <XXXX>
    <XXXX>
    <XXXX XXXX-XXXXX="XXXXXXX-XXXX" XXXXXXX="XXXX/XXXX; XXXXXXX=XXX-8859-1"/>
    <XXXXX>XXXXX 404 XXX XXXXX</XXXXX>
    </XXXX>
    <XXXX><X2>XXXX XXXXX 404</X2>
    <X>XXXXXXX XXXXXXXXX XXXXX-XXX. XXXXXX:
    <XXX>    XXX XXXXX</XXX></X><XX /><X><XXXXX>XXXXXXX XX XXXXX://</XXXXX></X><XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    <XX/>
    
    </XXXX>
    </XXXX>
    org.codehaus.jackson.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
    

    【讨论】:

      【解决方案3】:

      我将它用作更长命令的一部分:

      mvn -U test | (while read line; do echo ${line} | sed -e "s/.*ERROR.*/`echo -e '\e[91m&\e[0m'`/g" -e "s/.*\(WARN|INFO\).*/`echo -e '\e[93m&\e[0m'`/g"; done)
      

      【讨论】:

        猜你喜欢
        • 2010-11-16
        • 2011-04-18
        • 2015-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多