ラボ > サーバOS:Linux

ファイルから文字列を含む行を検索(grep、cat-grep、find-xargs)

例えば「メールログから特定の宛先を含む行全部」とか。

作成日:2018-07-04, 更新日:2023-04-25

対象ファイルから対象文字列を含む行の一覧

# cat 対象ファイル | grep 対象文字列 対象ファイル

例:メールログ(/var/log/maillog)から「zebra@example.com」を含む行全部。

# cat /var/log/maillog | grep zebra@example.com /var/log/maillog

対象文字列を含む行とファイル名の一覧(grep -H)

# grep -H 対象文字列 対象ファイル

例:ログ(log20230301~/log20230331)から「zebra@example.com」を含む行全部。

# grep -H zebra@example.com log202303*

ファイル名だけ(grep -l)

# grep -l zebra@example.com log202303*

メモ: 「cat xxx | grep xxx」と「grep xxx」について

結果を見ると一緒のような気がする。catを使うメリットってあるのかな?

▼調べたら同じ疑問を抱き、その回答まであった。
grepコマンドでのファイル指定について

とりあえずメリットがある。でもデメリットもあるので使い分ける必要があるということが分かった
→詳しくは気にしていないので放置する

複数のファイルから対象文字列を含む行の一覧

# find 対象PATH -type f -name ファイルA -o -name ファイルB -print | xargs grep "文字列"

メモ:grep

AとBを含む

# cat 〇〇〇 | grep A | grep B

A or Bを含む

# cat 〇〇〇 | grep -E "A|B"

もしくは下記(「|」を「\」をつけてエスケープさせる)

# cat 〇〇〇 | grep "A\|B"