1から特定の行まで文字列をgrep

1から特定の行まで文字列をgrep

私はLinuxで作業しており、次のコマンドを実行しています。

$ ls -t postgresq*.log | head -n1 | xargs grep "ALTER USER"  
< pg_user 2021-07-15 05:03:41.609 EDT > LOG:  statement: ALTER USER username WITH ENCRYPTED PASSWORD 'JUly@#12' valid until '2021-07-20';

しかし、私は次の文字列をgrepしたいと思います。

ALTER USER username WITH ENCRYPTED PASSWORD 'JUly@#12' valid until '2021-07-20';

ベストアンサー1

-oちょうど(で)man grepを使用してください:

$ man grep | grep -P -A1 -- '^\s+-o'
       -o, --only-matching
              Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

行内の一致部分-oのみが印刷されるため、簡単に検索して最後まですべての項目を一致させることができます。grepALTER USER.*ALTER USER

$ ls -t postgresq*.log | head -n1 | xargs grep -oP 'ALTER USER.*'
ALTER USER username WITH ENCRYPTED PASSWORD 'JUly@#12' valid until '2021-07-20';

気づく出力の解析ls一般的に良い考えではありませんが、これらのログファイルの名前は単純でなければならないので安全です。

おすすめ記事