LPIC問題集実施_12

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オプションを
付けないと検索パターンを基本正規表現と判断しますので、上表の拡張正規表現が使えません。