1

grep を使用していくつかのログ ファイルを検索しています。ログ エントリは次のようになります。

[2013-10-16 14:39:17] {"email":"email@host.com", "tel":"123456789", "address":"some address", "status":"0"}

(これはサンプルです。各エントリには多くのデータがあります)

私がやりたいことは次のとおりです。パターンでフィルタリングし、別のパターンを強調表示します。たとえば、ステータス= 1でフィルタリングします

cat log | grep 'status":1'

これは完全に機能し、次のような出力が得られます。

[2013-10-16 14:39:17] {"email":"email@host.com", "tel":"123456789", "address":"some address", " status":"1 "}

私がやりたいことは、出力で電子メールを強調表示して、次のようにすることです。

[2013-10-16 14:39:17] { "email":"email@host.com" , "tel":"123456789", "address":"some address", " status":"1 "}

注意してください、フィルターではなく、メールを強調表示したいだけです!

それは可能ですか?

ありがとう

4

4 に答える 4

2

強調表示のみを目的として、https://github.com/nicoulaj/rainbowをご覧ください。

リストされている他の蛍光ペンは次のとおりです

于 2013-10-16T12:58:46.493 に答える
2

強調grepしたいパターンについては、次のとおりです。

cat log | grep 'status":"1' | grep '"email":"[^"]*"'

于 2013-10-16T12:58:56.953 に答える
1

強調表示が既に機能していると仮定すると、次のようになります。

$ grep -e '"email":"[^"]*"' -e '"status":"1"'  file

ハイライトがまだ設定されていない場合は、次の--colorオプションを使用します。

$ grep --color=auto -e '"email":"[^"]*"' -e '"status":"1"'  file

これにより、ステータスでフィルタリングされ、1すべてのメールとステータスが強調表示されます。メールの強調表示のみが必要な場合は、次のようにします。

$ grep '"status":"0"' file | grep '"email":"[^"]*"'
于 2013-10-16T13:03:04.680 に答える
0

また、 を使用してフィルタリングされたテキストを操作してみてくださいawk。こんなファイルで

$ cat test.txt
[2013-10-16 14:39:17] {"email":"email1@host.com", "status":"1"}
[2013-10-16 14:39:17] {"email":"email2@host.com", "status":"0"}
[2013-10-16 14:39:17] {"email":"email3@host.com", "status":"1"}
[2013-10-16 14:39:17] {"email":"email4@host.com", "status":"0"}
[2013-10-16 14:39:17] {"email":"email5@host.com", "status":"1"}
[2013-10-16 14:39:17] {"email":"email6@host.com", "status":"0"}
[2013-10-16 14:39:17] {"email":"email7@host.com", "status":"1"}

このコマンドを試してください

cat test.txt | grep \"status\":\"1\" | awk '{print "\033[32m",$3,"\033[0m",$4}'
于 2013-10-16T13:09:00.687 に答える