Linux - grep / egrep / fgrep / sed



 ◆ 正規表現

 正規表現は任意の文字列パターンを表す表記方法です。正規表現はシェルのメタキャラクタと似ています。

正規表現 説明
*

 直前の文字の0回以上の繰り返し
 例 :
1*3.txt は、13.txt、113.txt などを表す。

.

 任意の1文字の文字列
 例 :
1..4.txt は、1234.txt、1ab4.txt などを表す。

[ ]

 [ ] 内の任意の1文字の文字列
 例 :
1[23]4.txt は、124.txt または 134.txt を表す。

^

 行頭
 例 :
^1 は、行頭にある 1 を表す。

$

 行末
 例 :
1$ は、行末にある 1 を表す。

 ※ 直前に (半角のバックスラッシュ)を入力することで通常の文字として処理します。\は日本キーボードではとなります。


 以下の「 + 」、「 ? 」、「 | 」 の3つは拡張正規表現と呼ばれる新しい表現です。

拡張正規表現 説明
+  直前の文字の1回以上の繰り返し
?  直前の文字の0回、もしくは1回の繰り返し
|  前後のいずれかの文字列



 ◆ メタキャラクタと正規表現の違い

表現方法 説明
メタキャラクタ  シェルにおいて、特別な意味を持つ記号のこと。
正規表現  文字列のパターンを表す時に利用される表現方法。


 ◆ grepコマンド

 grepコマンドは、指定した文字列を含む行を出力するコマンドです。

 ◆ 構文 : grep [ オプション ] 検索文字列 ファイル名

オプション 説明
-c  パターンがマッチした行の行数だけを表示
-f  ファイルから検索パターンを読み込む
-i  大文字小文字を区別せずに検索
-n  検索結果と合わせて行番号も表示
-v  パターンがマッチしない行の表示
-E  拡張正規表現の使用。egrepコマンドを使用する場合と同じ。
-F  検索文字列を正規表現ではなく固定文字列として認識。fgrepコマンドを使用する場合と同じ。

 ※ grepで正規表現を使用する場合、正規表現の部分を「 ' 」で囲むことで、シェルのメタキャラクタとして解釈されなくなる。


 ◆ 実行例 : data.txt ファイルから、大文字小文字に関係なく abc という文字列を検索
 $ grep -i abc data.txt

 ※ 上記コマンドにより合致する文字列は、abc、ABC、Abc、ABc、aBC、abC、aBc、AbC のいずれかがマッチします。




 ◆ egrepコマンド

 egrepコマンドは「 + 」、「 ? 」、「 | 」などの拡張正規表現を使用する際に使用するコマンドです。
 ただし、拡張正規表現は、
grep -Eコマンドでも使用することも可能です。

 ◆ 構文 : egrep [ オプション ] 検索文字列 ファイル名



 ◆ fgrepコマンド

 fgrepコマンドは検索文字列に正規表現を使用せず、固定文字列として検索する場合に使用するコマンド。
 grep -Fコマンドを使用する場合や正規表現の「 \ 」を用いた場合と同じ機能を持つコマンドです。

 ◆ 構文 : fgrep [ オプション ] 検索文字列 ファイル名

 ◆ 実行例 : "data.txt"ファイルから、「 * 」 を文字列として検索
 $ fgrep '*' data.txt




 ◆ sed コマンド

 sed コマンドは、テキストストリームに対して編集を行うコマンド。

 ◆ 構文 : sed [ オプション ] -f スクリプト [ ファイル ]

オプション 説明
-f ファイル  コマンドが書かれたスクリプトファイルを指定


 ◆ 構文 : sed [ オプション ] コマンド [ ファイル ]
 ◆ 構文 : sed [ オプション ] -e コマンド1 -e コマンド2 [ ファイル ]

オプション 説明
d  マッチした行の削除。「 "開始行,終了行d" 」 と指定することで削除を行う。
s  パターンに基づいた置換。「 s/検索パターン/置換パターン 」 と指定することで置換を行う。
y  文字の変換。「 y/検索文字/置換文字 」 と指定することで置換を行う。


 ◆ 実行例 : data1.txt ファイルの1行目から3行目を削除し、data2.txt ファイルとして保存
 $ sed '1,3d' data1.txt > data2.txt


 ◆ 実行例 : data.txt ファイルの abc に合致する部分を ABC に置換
 $ sed s/abc/ABC/ data.txt


 ◆ 実行例 : data.txt ファイルにおいて「1 を a」、「2 を b」、「3 を c」に置換
 $ sed y/123/abc/ data.txt



Linux 技術入門

Copyright(C) 2002-2024 ネットワークエンジニアとして All Rights Reserved