このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:位置にマッチするメタ文字とgrepコマンド

位置にマッチするメタ文字とgrepコマンド

 Linuxでテキストデータを扱う際、特定のパターンを持つ文字列を検索・抽出することがよくあります。grepコマンドは、そのようなニーズに応えるための強力なツールであり、正規表現と組み合わせることで、より高度な検索が可能となります。ここでは、行の先頭や末尾など、位置にマッチするメタ文字grepコマンドの使い方について詳しく解説します。

grepコマンドの概要

 grep(global regular expression print)は、指定したパターンにマッチする行を検索して表示するためのコマンドです。正規表現を使用することで、単純な文字列検索よりも柔軟で強力なパターンマッチングが可能になります。

【書式】
grep [オプション] '<検索パターン>' <ファイル名>

  • [オプション]grepコマンドの動作を変更するためのオプションを指定します。
  • <検索パターン>:シングルクォート ' ' で囲んで、検索したい正規表現パターンを指定します。
  • <ファイル名>:検索対象のファイル名を指定します。

位置にマッチするメタ文字

 位置にマッチするメタ文字を使うことで、行の先頭や末尾など、特定の位置にある文字列を検索できます。主に以下の2つのメタ文字があります。

  • ^(キャレット):行の先頭を示します。
  • $(ドルサイン):行の末尾を示します。

これらを他のメタ文字や文字列と組み合わせて使用します。

実践例

 以下のgrepコマンドの使用例でマッチするURLの文字列が含まれるテキストファイルexample.txtを作成します。

ステップ1:example.txtの作成

user01@ubuntu:~$ nano example.txt

example.txtの内容

www.example.com
www.testsite.net
ftp.example.org
www.opensource.org
example.com
testsite.net
sampledomain.com
mywebsite.net
yourportal.org
community.com
commercial.net

# 空行を含める

ステップ2:特定のパターンを検索

1.単純にcomというパターンで検索

user01@ubuntu:~$ grep 'com' example.txt

出力結果

www.example.com
example.com
sampledomain.com
community.com
commercial.net

解説

  • パターン'com'を指定すると、comを含むすべての行が表示されます。
  • 行のどの位置にcomがあってもマッチします。

2.行頭がcomで始まる行を検索

行頭を示す^を使用して、^comというパターンを指定します。

user01@ubuntu:~$ grep '^com' example.txt

出力結果

community.com
commercial.net

解説

  • ^comは「行の先頭がcomで始まる行」を意味します。
  • community.comcommercial.netがマッチします。

3.行末がcomで終わる行を検索

行末を示す$を使用して、com$というパターンを指定します。

user01@ubuntu:~$ grep 'com$' example.txt

出力結果

www.example.com
example.com
sampledomain.com
community.com

解説

  • com$は「行の末尾がcomで終わる行」を意味します。
  • comで終わる行のみが表示されます。

4.空行を検索

行頭と行末を連続して指定する^$というパターンは、空行にマッチします。

user01@ubuntu:~$ grep '^$' example.txt

出力結果

user01@ubuntu:~$ grep '^$' example.txt

user01@ubuntu:~$ 

解説

  • 空行が1つだけ表示されます。
  • grepコマンドはデフォルトでマッチした行を表示するため、空行もそのまま表示されます。

5.空行を除外して表示

 grepコマンドの-vオプションを使用すると、マッチしなかった行を表示できます。^$にマッチする空行を除外するには、以下のようにします。

まず、catコマンドでexample.txtの内容を確認しておきます。

user01@ubuntu:~$ cat example.txt

出力結果

www.example.com
www.testsite.net
ftp.example.org
www.opensource.org
example.com
testsite.net
sampledomain.com
mywebsite.net
yourportal.org
community.com
commercial.net

# 空行を含める

grepコマンドの-vオプションを指定して実行します。

user01@ubuntu:~$ grep -v '^$' example.txt

出力結果

www.example.com
www.testsite.net
ftp.example.org
www.opensource.org
example.com
testsite.net
sampledomain.com
mywebsite.net
yourportal.org
community.com
commercial.net
# 空行を含める

解説

  • -vオプションは「マッチしなかった行を表示する」ことを意味します。
  • ^$にマッチする空行を除外し、その他の行をすべて表示します。

不要となったファイルの削除

user01@ubuntu:~$ rm example.txt

位置にマッチするメタ文字のまとめ

メタ文字意味
^行の先頭を示す。
$行の末尾を示す。
位置にマッチするメタ文字

まとめ

  • 位置にマッチするメタ文字を使用することで、行の先頭や末尾に特定の文字列がある行を効率的に検索できます。
    ^(キャレット):行の先頭を示す。
    $(ドルサイン):行の末尾を示す。
  • 実践的な例として、URLリストやドメイン名の一覧から特定のドメイン(comnetなど)を持つ行を抽出できます。
  • 空行の処理
    ・空行を検索するには、^$というパターンを使用します。
    ・空行を除外するには、grep -v '^$'とします。
  • 正規表現とgrepコマンドを組み合わせることで、テキスト処理の幅が大きく広がります。

 以上で、位置にマッチするメタ文字とgrepコマンドの解説を終わります。正規表現を活用することで、より高度なテキスト検索が可能になりますので、ぜひ活用してみてください。