パターンを含むすべてをgrepします。

パターンを含むすべてをgrepします。

次のように例外を含むログファイルがあるとします。

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

「例外」を含め、最初から最後まですべての行を出力したい。

希望の出力:

java.lang.NullPointerException
ABC.Exception
dogchacecat.Exception

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

答え1

使用grep:

grep -o '.*Exception' file

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

'.*Exception'
これは、「Exception」という単語が出るまで、すべての文字(行終端を除く)のゼロからの無限の出現と一致します。


あなたのコメントで言及した動作(前のスペースExceptionまで文字列を取得して含む)を取得するには、拡張またはPerl正規表現を使用して\S制御文字(スペース以外の文字)を使用できます。

grep -oE '\S+Exception' file

答え2

POSIXユーティリティの使用(GNUおよび非GNU実装で使用可能):

まですべて最初Exception1行で表示されます。

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

まですべて最後起こる:

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

含まれていない行を変更していないままにするには、-nおよびを削除します。pException

答え3

そしてあなたのものお気に入りの標準エディタ、ed:

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

inputこれにより、ここにあるコマンド文字列のリストを使用して入力ファイルが編集されます。

  1. 1,$- ファイルの各行(1から最後まで$)、
  2. s/Exception.*/Exception/.*- 「Exception」という単語のみを使用して、文字列「Exception」の後に任意の項目()が続く文字列を検索して置き換えます。
  3. w- ファイルをディスクに書き戻します。
  4. q——編集終了

関連情報