1、「test.txt」ファイルから、「PINGT」または「pingt」という文字列を含まない行を抽出したい。
・grep -Ev ‘PINGT|pingt’ test.txt
・egrep -v ‘PINGT|pingt’ test.txt
解説:
ファイルや標準入力から、正規表現のパターンにマッチする文字列を含む行を抽出するにgrepコマンドを利用します。
grep [オプション]検索パターン「ファイル名」
オプション 説明
-c マッチした行の行数のみ表示
-f 検索パターンをファイルから読み込む
-i 大文字と小文字を区別しない
-n 先頭に行番号をつけて、マッチした行を表示
-v マッチしなっかた行を表示
-E 拡張正規表現を使用(egrepコマンドと同様)
-F 検索パターンを正規表現ではなく、固定文字列とする(fgrepコマンドと同様)
参考:
正規表現とは、文字列の特定のパターンを認識するために使用する表現方法です。文字列の検索や置換などを行う際に利用します。正規表現には基本正規表現(BRE:Basic Regular Expression)と拡張正規表現(ERE:Extended Regular Expression)があります。
以下は主な正規表現とその使用例をまためたものです。
記号 説明 使用例 . 任意の1文字 a.. aから始まる3文字(aaa,abcなど) * 直前の文字の0回以上の繰り返し .* 任意の文字列 [] []内のいずれか1文字 [abc] a,b,cのどれか1文字 []内では、以下の表現と併用可能 - 範囲指定 [a-z] 小文字のアルファベット1文字 ^ 先頭にある場合は後続の文字以外 [^abc] a,b,c 以外のどれか1文字 ^ 行頭 ^a aから始まる行 $ 行末 a$ aで終わる行 \ 次の1文字をエスケープ \* (通常の文字として処理) *という文字 + 直前の文字の1回以上の繰り返し a+/ [拡張正規表現] aを1回以上繰り返す文字列(a,aa,aaaなど) ? 直前の文字の0回もしくは1回の繰り返し windows? windowsのsが0または1文字 [拡張正規表現] (window,windows) | 右左いずれかの文字列 abc|xyz [拡張正規表現] abcまたはxyz 正規表現には次のような基本の概念があります。 ・特殊文字 「|」や「\(エスケープ文字)」などのように特殊な意味を持つ文字のことです。 ・文字クラス 「[]」内の文字集合のことです。 ・数量詞 「*」や「+」などのように文字列内での位置を示す文字のことです。 ・アンカー 「^」や「$」などのように文字列内での位置を示す文字のことです。 なお、正規表現の「*」と、シェルによって解釈されるメタキャラクタの「*」では意味が異なる ので注意してください。シェルは「*」を0文字以上の文字列を解釈します。 正規表現は明示的に「'」(シングルクォーテーション)や「”」(ダブルクォーテーション)の 引用符で囲う事ができます。これらの引用符で囲まれた正規表現の記号は、シェルにメタキャラクタ として扱われなくなります。 正規表現を利用する主なコマンドは以下のとおりです。 ・grep ファイルや標準入力から、検索パターンにマッチする文字列を含む行を抽出するコマンド なお、「-E」オプションを併用すると拡張正規表現が使えます(egrepコマンドと同様)。 ・sed ファイルや標準入力の内容を編集して表示するコマンド 例1)1から5までのいずれかの文字がある行を「test.txt」ファイルから抽出する場合 $grep "[1-5]" test.txt 例2)「test.txt」ファイルの「#」から始まる行を削除して出力する場合 $sed '/^#/d' test.txt 基本正規表現と拡張正規表現の違いに注意してください。grepコマンドは、-Eオプションを 付けないと検索パターンを基本正規表現と判断しますので、上表の拡張正規表現が使えません。