2012-03-26 7 views
0

私はhtmlの部分を取りに行き、それをそれに応じて色分けしてそれを色づけしたいと思います。私はそれを達成するために、sedやその他のcliツールをどう使うことができるのだろうかと思っています。 sed multiline pygentize

私はsedのワンライナーの束を試してみましたが、以下の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: [email protected]; line: 1, column: 2] 
私は長いコマンドにこれを追加している0

UPDATE

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) 

答えて

0

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) 
2

猫ログ| awkの/ <HTML> /、/ < \/htmlの>/'

それを行う必要があります。

最初のhtmlタグの前に "ひっかき"を取り除くには、sedを使ってhtmlタグを自分の行に置きます。

cat log | sedの/ <html>/\ n <html>/'| awkの/ <HTML> /、/ < \/htmlの>/'

+0

これをENDパターンでエスケープする必要があります。また、ユーザーのサンプル入力を考えれば、同じ行にあると見える ''の前にnon-htmlテキストが含まれていると思います。皆さんお元気で。 – shellter

+0

Hmm。それは変だ。プレビューでエスケープが表示されます。最終的な答えでは、それはしません! – John3136

+0

これはクールですが、まだ最初の行の入力があり、それは長いコマンドの一部になるでしょう。あなたの答えは依然として非常に役立ちますが、これは残酷かもしれません。私はあまりにも多くの場合、いくつかの助けを提供するためにPythonプログラムを作成するかもしれません。 – prafulfillment

0

TXR:

説明の目的のために、我々はX.

でHTML内のすべての文字を置き換えるコマンドで pygmentizeを置き換えます
@;; 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 `[email protected]`) 
<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')