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 実行結果は、以下の実行例を参照して下さい。 |
実行例
最初に検索対象のテキストファイルの中身を確認します。
cat -n textfile.txt

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

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

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

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

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

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

