grepコマンド
grepコマンドは、ファイル内の特定の文字列を検索するために使用されるコマンドラインツールです。以下は、grepコマンドの一般的な使用法です。
1. 使用法
grep [オプション] [検索文字列] [ファイル名]
2. オプション(抜粋)
① -i : 大文字と小文字を区別せずに検索します。
② -v : 検索文字列に一致しない行を表示します。
③ -r : カレントディレクトリ以下の全てのファイルを再帰的に検索します。
④ -n : 一致した行の前に行番号を表示します。
⑤ -c : 一致した行の数をカウントして表示します。
⑥ -l : 検索文字列が含まれるファイル名を表示します。
⑦ -h: 検索文字列が含まれるファイル名を表示しない。
⑧ -s: エラーメッセージを出力しないこと。
⑨ -L : 検索文字列が含まれないファイル名を表示します。
⑩ -F : 検索文字列を正規表現としてではなく、文字列として扱います。例:a.eは"ale"や"ape"にマッチングしない
⑪ -f: 検索文字列のかわりに、複数行の検索文字列を含むファイルを指定。例:grep -f pattern.txt test.txt
⑫ -A [行数] : 一致した行の後ろに指定した行数分の行を表示します。
⑬ -B [行数] : 一致した行の前に指定した行数分の行を表示します。
⑭ -C [行数] : 一致した行の前後に指定した行数分の行を表示します。
⑮ -E : 拡張正規表現を使用して検索します。直前の正規表現が+1回以上、?0回か1回、{n}n回、{n,}n回以上、{n,m}n回以上m回以下
3. オプション(-E)について
拡張正規表現を使用して検索します。直前の正規表現が+1回以上、?0回か1回、{n}n回、{n,}n回以上、{n,m}n回以上m回以下
-Eを付けない場合:基本正規表現(特殊文字はバックスラッシュでエスケープ)
付ける場合:拡張正規表現(エスケープ要らない)
[root@localhost demo]# grep "a?d" test.txt
[root@localhost demo]#
[root@localhost demo]# grep "a\?d" test.txt
ad
bd
[root@localhost demo]# grep -E "a?d" test.txt
ad
bd
4. [検索文字列]の基本正規表現(-Eを付けないで)
① ^ : 行頭を表します。例えば、^appleとすると、"apple"で始まる行を検索できます。
② $ : 行末を表します。例えば、apple$とすると、"apple"で終わる行を検索できます。
③ [0-9] : 数字1文字を表します。
④ [a-z] : 英小文字1文字を表します。
⑤ [a-zA-Z] : 英文字1文字を表します。
⑥ . : 任意の一文字を表します。例えば、a.eとすると、"ale"や"ape"など、"a"と"e"の間に1文字ある行を検索できます。
⑦ * : 直前の文字が0回以上繰り返されることを表します。
例えば、ap*leとすると、“ale"や"apple”、"appple"などを検索できます。
⑧ \+ : 直前の文字が1回以上繰り返されることを表します。
例えば、ap\+leとすると、"apple"や"appple"などを検索できます。
⑨ \? : 直前の文字が0回または1回現れることを表します。
例えば、ap\?leとすると、"ale"や"apple"を検索できます。
⑩ [] : 括弧内のいずれかの文字と一致することを表します。例えば、[aeiou]とすると、"apple"の"a"や"ape"の"e"など、括弧内に含まれる文字に一致する行を検索できます。
⑪ [^] : 括弧内のいずれの文字でもないことを表します。
例えば、[^aeiou]とすると、母音以外の文字から成る行を検索できます。
⑫ \{n\}: 直前の文字がn回現れることを表します。
⑬ \{n,\} : 直前の文字がn回以上現れることを表します。
⑭ \{n,m\} : 直前の文字がn回以上m回以下現れることを表します。
5. デモ
正規表現で柔軟な検索
[root@localhost demo]# grep "[0-9]" test.txt
#7654321#
87#65
9876#
[root@localhost demo]# grep "^[0-9]" test.txt
87#65
9876#
[root@localhost demo]# grep "^[0-9]7" test.txt
87#65
[root@localhost demo]
先頭部2~4桁が英小文字、且つ固定文字#がついている
grep "^[a-z]\{2,4\}#" test2.txt
[root@localhost demo]# cat test2.txt
ab#123
abcd#123
abcde#123
[root@localhost demo]# grep "^[a-z]\{2,4\}#" test2.txt
ab#123
abcd#123
[root@localhost demo]#
コメント欄