目次
対象読者
● Linuxコマンド初学者
要点
● grepコマンド = テキストを検索するコマンド
○ grep {検索するテキスト} {ファイル名・ディレクトリ名}
のように利用する
● -n
を利用する事で該当のテキストがファイルの何行目に存在するかを確認可能
grepコマンドとは?
grepコマンドは、ファイルの中身に指定したテキストが含まれているか確認するコマンドです。
指定した1つのファイルの中身に対して検索を掛ける事も、ディレクトリを指定して、ディレクトリ配下全てのファイルに対して検索を掛ける事も可能です。
今回は基本である、単一ファイル内での検索、ディレクトリ配下のファイルに対する検索・-n
コマンドを利用した検索を見ていきましょう。
単一ファイル内での検索方法
ある特定のファイルの中で検索を行いたい場合は、grep a test_a.txt
のようにgrep {検索したいテキスト}
{検索対象のファイル}
という形式で利用します。
実際に手を動かして確認しましょう。まずはターミナル(Windowsの場合git bashなど)を開いてください。
事前準備
まずは準備をします。viコマンドを利用してデスクトップの階層にtest_a.txt
を新規作成し、”This is test a!”と記載します。同様にtest_b.txt
, test_c.txt
も作成し、それぞれ”This is test b!”, “This is test c!”と記載しましょう。
次に、mkdirコマンドでtest
というディレクトリを作成し、その配下にtest_d.txt
を作りましょう。test_d.txt
にも同じ形式で”This is test d!”と記載します。
デスクトップの階層とtest
の階層でlsコマンドを実施し、以下のようになっていればOKです。(ファイルの中身が正常に記載されているか確認したい場合はcatコマンドでファイルの中身を出力してみましょう。)
正常に作成された事を確認したら準備完了です。
挙動確認
まずは、test_a.txt
の中からa
というテキストを検索してみましょう。
コマンドは、grep a test_a.txt
です。
a
が含まれる行が表示されます。該当の文字が存在する場合、該当文字を含む行が出力されます。
(この例の場合text_a.txt
の中身が一行ですが、複数行の記載があるファイルで実施しても該当文字を含む行のみを出力します。)
次にtest_b.txt
に対してa
というテキストを検索を行ってみましょう。
コマンドは、grep b test_a.txt
です。
test_b.txt
の中にはa
というテキストが存在しないため、出力がありません。
複数ファイル内での検索方法
事前準備
先程作成したファイル・ディレクトリを使用します。
挙動確認
まずは、デスクトップの階層のファイルを対象にa
というテキストを検索してみましょう。
コマンドは、grep a ./*
です。実行前にlsコマンドでデスクトップの階層に居る事を確認しましょう。
(*
は全てのファイルを表すワイルドカードです。)
デスクトップの階層に存在するファイルの内、a
が含まれるファイル名と、該当の行が出力されます。また、検索をかける階層にディレクトリが存在する場合は、上記の様に”~~ Is a directory”というメッセージが出力されます。
次に、デスクトップの階層のファイルを対象にtest
というテキストを検索してみましょう。
コマンドは、grep test ./*
です。
デスクトップ階層に存在するファイルに対して検索が完了しました。test
というテキストはtest_a.txt
, test_b.txt
, test_c.txt
が存在するため、それぞれのファイルの該当する行が出力されました。
注目したい点は、test
ディレクトリ配下に存在するtest_d.txt
にもtest
というテキストは存在しますが、検索は実行されません。これは、test_d.txt
がgrepコマンドを実行したディレクトリ(デスクトップ)に存在しないからです。
-nオプションを付与した検索
事前準備
先程作成したファイル・ディレクトリを使用します。
挙動確認
-n
オプションを付与すると、検索結果の行を出力する事が出来ます。
grep -n a test_a.txt
を実行してみます。
a
というテキストが存在する行が行数と一緒に出力されました。
出力のコピー
出力された結果は>
を利用して別ファイルに書きだす事も可能です。
事前準備
先程作成したファイル・ディレクトリを使用します。
挙動確認
grep a test_a.txt > test_a_copy.txt
を実行してみましょう。実行後は、catコマンドでtest_a_copy.txt
の中身を見てみましょう。
このようにgrep {検索するテキスト} {検索対象のファイル} > {出力結果を書きだすコマンド}
のように利用する事で、別のファイルに結果を書きだす事が出来ます。こちらも覚えておくと便利です。
【次の記事】
wcコマンド