2013-04-11 25 views
7

私の仕事では、ファイルのパターンを頻繁に探しています。一般的に私はgrep --color=autoを使用して検索パターンを色付けします。今私が複数のパターンを探しているときに、それらのパターンがすべて1行に存在するようにするには、grep pattern1 file|grep pattern2|grep pattern3またはawk '/pattern1/&&/pattern2'を使用します。しかし、この方法では、grepでは私にとって非常に有益な色づけが失われるか、awkではパターン文字列だけを色付けする方法はわかりません。あまりに面倒になると、私はgrep pattern1 file|grep pattern2|grep pattern3|grep -E "pattern1|pattern2|pattern3"を使います。awkのカラー出力、またはgrepの複数パターン検索と条件の使用

grepには複数のパターンがあり、条件がありますが、何らかの方法がありますか? (正規表現はそれをサポートすべきだと思いますが、特にパターンの順序は固定されていません)。

また、awkの検索パターンを色分けする方法はありますか?以下は、印刷するファイルAwk color text考える

どれ短いコンパクトなアプローチは歓迎されているあなたはコードをawkを使用して、独自のshell script/function構築し、逃れることができ

+0

は、http://stackoverflow.com/a/6540890/297323 –

+0

@FredrikPihl私は、以前のawkのカラー出力で検索に私の答えを参照してくださいそれらのすべてが実際にパターンではなくフィールドをフォーマットしています。だから、もし私が望むなら、私は2番目のフィールドを緑で作ることができますが、私のパターンが2番目のフィールドか3番目のフィールドに来るかどうかはわかりません。私が欲しいのは、そのパターンがどこに来るのかにかかわらず、パターンが緑色でなければならないということです。 – abasu

答えて

6

あなたは--color=alwaysを使用することができます。

grep pat1 --color=always | grep pat2 
+0

ありがとう@perreal、それは日を保存しました:)。しかし、まだ、私は好奇心が、 "と"の状態でパターンを組み合わせるgrepの方法はありますか? "または"条件が存在する場合、なぜ "と"が存在しないのですか?私はパイプ出力について話しているのではなく、指定されたすべてのパターンを任意の順序で含む文字列を探し出す単一のgrepです。 – abasu

+1

やり方は1)配管、2) 'grep -e ' pat1。* pat2 '-e' pat2。* pat1 'input'。恐らくそれは重複しているために行方不明になっているでしょう(あなたはパイプで 'or'できません)。 – perreal

5

(私は何度も日を使用するため)マッチワードシアンAwk

$ awk '/Awk/{gsub(/Awk/,"\033[1;36m&\033[1;000m");print}' file 
Awk color test 

この原理は簡単に複数のパターンを拡張することができる一行目にThis line ends hereを添加しました。

$ awk '/Awk/&&/This/{gsub(/Awk|This/,"\033[1;36m&\033[1;000m");print}' file 
Awk color test This line ends here. 

シェルカラーの詳細については、hereをご覧ください。色を保持するためにはgrepからの配管とき

+1

ありがとう@sudo_O、私はgsubについて知っていましたが、この方法を使用することは考えていませんでした。それは完全に第二の質問に答える。 – abasu

関連する問題