ブログ

正規表現の使い方4(grepによるファイル内文字列の検索)

at_takumi.mizutani
2022年8月15日 13時52分

ファイル内文字列の検索(基本正規表現)

ファイル内の文字列を検索するにはgrepコマンドを使用します。

以下の例では、Armadillo.txtから"Armadillo-IoT"とマッチする行を検索します。

cオプションを使用するとマッチする行数を出力することもできます。

Armadillo.txt
Armadillo-IoT_G4
Armadillo-IoT_G3
Armadillo-IoT_G3L
Armadillo-IoT_A6
Armadillo-IoT_A6E
Armadillo-X1
Armadillo-640
Armadillo-610
Armadillo-460
Armadillo-440
Armadillo-420
Armadillo-410
Armadillo-840
Armadillo-810
[armadillo ~]# grep '^Armadillo-IoT.*' Armadillo.txt
Armadillo-IoT_G4
Armadillo-IoT_G3
Armadillo-IoT_G3L
Armadillo-IoT_A6
Armadillo-IoT_A6E
[armadillo ~]# grep -c '^Armadillo-IoT.*' Armadillo.txt
5

また、vオプションを使用すると指定した正規表現にマッチしない行を検索することができます。

以下の例では、Armadillo.txtから"Armadillo-IoT"とマッチしない行を検索します。

[armadillo ~]# grep -v '^Armadillo-IoT.*' Armadillo.txt
Armadillo-X1
Armadillo-640
Armadillo-610
Armadillo-460
Armadillo-440
Armadillo-420
Armadillo-410
Armadillo-840
Armadillo-810

ファイル内文字列の検索(拡張正規表現)

拡張正規表現※1を使用してファイル内の文字列を検索するにはegrepコマンド、またはgrepコマンドのEオプションを使用します。

以下の例では、Armadillo.txtから"Armadillo-IoT_A6E"、"Armadillo-IoT_G3"、"Armadillo-IoT_G4"とマッチする行を検索します。

また、egrepコマンドでも同様にマッチする行数をカウントするcオプションや、マッチしない行を検索するvオプションを使用することができます。

[armadillo ~]# egrep '^Armadillo-IoT_(A6E|G3|G4)$' Armadillo.txt
Armadillo-IoT_G4
Armadillo-IoT_G3
Armadillo-IoT_A6E
[armadillo ~]# egrep -c '^Armadillo-IoT_(A6E|G3|G4)$' Armadillo.txt
3
[armadillo ~]# egrep -v '^Armadillo-IoT_(A6E|G3|G4)$' Armadillo.txt
Armadillo-IoT_G3L
Armadillo-IoT_A6
Armadillo-X1
Armadillo-640
Armadillo-610
Armadillo-460
Armadillo-440
Armadillo-420
Armadillo-410
Armadillo-840
Armadillo-810

正規表現についての記事

  1. 正規表現の使い方1(任意の文字とのマッチ)
  2. 正規表現の使い方2(連続文字とのマッチ)
  3. 正規表現の使い方3(OR条件を用いたマッチ)
  4. 本記事
  5. 正規表現の使い方5(sedによるファイル内文字列の加工)

※1 正規表現は基本正規表現(BRE)、拡張正規表現(ERE)、Perl互換の正規表現(PCRE)の3種類に分けられ、
"+"、"?"、"|"、"{}"は拡張正規表現に分類されます。