web-dev-qa-db-ja.com

パターンまでのすべてをgrep

示されているように例外が含まれているログファイルがあるとしましょう

Java.lang.NullPointerException blabla
ABC.Exception blalabbla
dogchacecat.Exception yadayada

各行の先頭から「例外」まで(含む)まで出力できるようにしたい

望ましい出力:

Java.lang.NullPointerException
ABC.Exception
dogchacecat.Exception

GNUツール(grep、awk、sed))を使用してこれを行うにはどうすればよいですか?ありがとうございます!

2
abadawi

grepの使用:

grep -o '.*Exception' file

-o、--only-matching
行の一致する部分のみを印刷します。

'.*Exception'
これは、単語「例外」まで、0と任意の文字(行末記号を除く)の無制限の出現の間で一致します。


コメントで述べた動作(Exceptionの前の文字列を先頭の空白文字までプルする)を取得するには、拡張正規表現またはPerl正規表現を使用して\S制御文字(非-空白文字):

grep -oE '\S+Exception' file
5
jesse_b

POSIXユーティリティを使用する場合(GNUおよび非GNU実装で機能する):

firstまでのすべての行でのExceptionの出現:

sed -n 's/\(Exception\).*/\1/p'

last発生までのすべて:

sed -n 's/\(.*Exception\).*/\1/p'

pを含まない行を保持する(変更しない)場合は、-nおよびExceptionを削除します。

3

あなたの お気に入りの標準エディタ、ed

ed -s input <<< $'1,$s/Exception.*/Exception/\nw\nq'

これにより、入力ファイルinputが、コマンドのhere-stringリストで編集されます。

  1. 1,$-ファイルのすべての行(1から最後まで$)、
  2. s/Exception.*/Exception/-文字列 "Exception"を検索し、その後に何でも続く(.*)「例外」という単語のみ
  3. w-ファイルをディスクに書き戻します
  4. q-終了しました
2
Jeff Schaller