複数のテキストファイルから特定の文字列を検索する方法

複数のテキストファイルから特定の文字列を検索する方法。

参考url:
Linuxコマンド逆引き大全

テキスト・ファイルから特定の文字列を含む(論理)行を抜き出すには,「grep」コマンドを用いる。grepの後に検索したい文字列を指定し,さらにその後に検索対象とするファイルを指定する。

$ grep "Linux" target_file

検索結果は標準出力に出てくるので,検索結果をファイルに残したい場合はリダイレクトを用いる。

$ grep "Linux" target_file > result

また,正規表現を用いることにより,「yyyy/mm/dd」のフォーマットで表記されている日付も探せる。正規表現を用いる場合は,「-e」オプションを付ける。

$ grep -e "[0-9]{4}/[0-9]{2}/[0-9]{2}" target_file

応用:拡張子が”php”であるファイルについて,文字列”Linux”を探す

$ find . -type f -name "*.php" | xargs grep "Linux"

findで特定のファイルを絞り込んだ後に,「xargs」コマンドでファイル名のリストを作成し,grepでそれらファイルの検索を行う。

「xargs」コマンドについてはこちら

応用:検索する際,大文字・小文字を区別しない

$ grep -i "LiNuX" target_file

“Linux”,”linux”,”LINUX”など大文字・小文字を区別せずに検索結果として扱われる。

UNIX系コマンド xargs の便利な使い方メモ

xargsコマンドの便利な使い方のメモ。

参考url:
いまさらxargsの便利さを主張してみる

使い方の例
カレントディレクトリ以下にある、最後の1文字が「~」である全てのファイルを「ls -la」する。

$ find . -name *~ | xargs ls -la
-rw-rw-r--  1 hanawa hanawa 29 Feb 19 18:23 ./c/test.c~
-rw-rw-r--  1 hanawa hanawa  9 Feb 19 18:21 ./hogehoge.txt~

ちなみに、このレシピは十分実用的な例です。xargsを利用してrmのような取り返しのつかないコマンドをいきなり実行するのは怖いので、「xargs rm」する直前に「xargs ls -la」などで対象ファイルを確認しておけばミスがありません。期待通りのファイルが「ls -la」されているのを確認した後で、シェルのヒストリを編集して「ls -la」を「rm」に書き換えて実行するわけです。