Linux テキストファイルを学ぼう その2

テキストファイルの内容を検索する

前回は、テキストファイルを表示するさまざまコマンドを学びました。
今回は、テキストファイルの内容を検索する方法を学びましょう。

Linuxでは、grepコマンドを利用することで、テキストファイルの内容を検索する事ができます。
また、正規表現を利用する事で、単純な文字列だけで無く、さまざまな文字パターンを検索する事ができます。

正規表現(Regular Expression)とは、文字列のパターンを柔軟に指定することができる表記法です。
正規表現では、メタ文字という特別な意味をもつ文字を利用することにより、さまざまな文字パターンを指定する事ができます。

主な正規表現のメタ文字は以下の表を参照して下さい。
拡張正規表現は、grepコマンドのオプション -E を使用することで利用できます。

メタ文字説明
.任意の1文字とマッチする

例)a.z → abz
*直前の文字の0回以上の繰り返しにマッチする

例)a* → a , aa , aaa
+直前の文字の1回以上の繰り返しにマッチする (拡張正規表現)

例)a+ → aa , aaa , aaaa
?直前の文字の0回または1回の繰り返しにマッチする (拡張正規表現)

例)ab? → a , ab
^行頭にマッチする

例)^abc → 行の先頭がabcで始まる
$行末にマッチする

例)xyz$ → 行の終わりがxyzで終わる
[]囲まれた範囲の1文字とマッチする

例)[abc] → a , b , c
[a-c] → a , b , c
()正規表現の有効範囲を指定する (拡張正規表現)

例)(abc)+ → abcabc , abcabcabc
|左右の記述いずれかにマッチする (拡張正規表現)

例)a|b → a または b
\直後のメタ文字を通常文字として扱う

例)ab\[c\] → ab[c]
主な正規表現のメタ文字

grep

コマンド説明
grep指定したパターンにマッチした行を表示する。
書式grep [オプション] パターン [ファイル名]
オプション-i , –ignore-case 大文字と小文字を区別しない
-n , –line-number 行番号も表示する
-v , –invert-match パターンにマッチしなかった行を表示する
-c , –count パターンにマッチした行数のみを表示する
-E , –extended-regexp 拡張正規表現を使う
-G , –basic-regexp 基本正規表現を使う
実行例grep -i hello textfile.txt
grep a. textfile.txt
grep a* textfile.txt
grep aa* textfile.txt
grep -E pp? textfile.txt
grep -E ‘^a|b’ textfile.txt

実行結果は、以下の実行例を参照して下さい。
grep

実行例

最初に検索対象のテキストファイルの中身を確認します。
cat -n textfile.txt

cat -n textfile.txt

grep -i hello textfile.txt
「hello」の文字列を大文字小文字を区別しないで検索

grep -i hello textfile.txt

grep a. textfile.txt
「a」の後で任意の1文字を検索

grep a. textfile.txt

grep a* textfile.txt
「a」の 0回以上の繰り返しを検索

grep a* textfile.txt

grep aa* textfile.txt
「a」の後で「a」の 0回以上の繰り返しを検索

grep aa* textfile.txt

grep -E pp? textfile.txt
「p」の後の「p」の 0回または1回の繰り返しを検索

grep -E pp? textfile.txt

grep -E ‘^a|b’ textfile.txt
行の先頭が「a」または「b」で始まる文字列を検索

grep -E '^a|b' textfile.txt