🦔

Linuxさんの正規表現とワイルドカード、grepコマンド①

2021/01/05に公開

はじめに

くーばねてすをやっつけるためにLinuxさんと仲良くさせていただいているが、Linuxさんには超大量のテキストがあって、検索するときにいろいろな表現で検索できるらしい。
今回は正規表現とメタ文字、grepコマンドを使って検索する。

概要

■正規表現とは
■ワイルドカードとの違い
■メタ文字とは
■文字に一致するメタ文字
■位置に一致するメタ文字

正規表現とは

正規表現は、正規という言葉がついているのでちゃんとした文字列で表現するものかと思いきや、きちんとした文字を指定するものではない。(えぇっ)
むしろ逆で、あやふやな文字を指定することで、複数の文字列にマッチするのか調べる方法である。正規表現ではメタ文字を使って検索する。

ワイルドカードとの違い

ワイルドカードも正規表現も文字列の集合を一つの文字列で表現する方法だ。だが二つは使う記号の量や位置が変わる。

言葉 意味
ワイルドカード 「*」「?」の2種類の記号のみで、文字列の集合を表現
正規表現 ワイルドカードの「*」「?」に加えて、さらに他の記号を使ってより文字列の集合を表現
ざっくり言うとワイルドカードも正規表現も一緒で、正規表現はワイルドカードのさらにレベルアップ版だと思えばいい。
「正規表現のほうが複雑な条件を表現できる
正規表現には複数の流派が存在し、ツールにより使える表現が若干異なる」
らしい。('_')???
正規表現の特徴として検索表現を ' ' クォートで囲う。
正規表現は通常の文字とメタ文字と呼ばれる特殊な意味を持つ文字の組み合わせで検索パターンを作っていく。

メタ文字とは

正規表現で使えるあやふやな文字を指定できる記号のこと。
色んなメタ文字があるよ!

文字に一致するメタ文字

■.(ドット)(任意の1文字)

.(ドット)は任意の1文字にあたる。

'文字.文字'   {.は一文字をさすよ!)
$ ls | grep 'u.ko'.txt
unko.txt

unko.txtがでた!ちゃんと任意の1文字だね!
メタ文字.(ドット)は文字にも記号にも対応するらしい。

■ [ ] (かっこ)(かっこ内のいずれかに一致するもの)

[ ]はかっこ内のいずれかに一致するものを指定する。

[文字文字文字]   {こんなかからどれでもいいから!)
$ls | grep '[au]nko'.txt
unko.txt

どっちも検索した結果がでたね!

■[文字-文字]([ ]内で〇〇から〇〇を指定する)

かっこ内で-(ハイフン)を利用して〇〇から〇〇を指定することもできる!

[文字-文字]    {こっからここまで!)
$ls | grep '[a-z]nko'.txt
unko.txt

aからzまでのいずれかを検索した結果がでた!
もちろん数字にも対応してるぞ!

[^文字]([ ]内で指定した文字以外に一致するものを指定する)

[^文字文字文字]    {こんなかのはいれないで!)
$ls | grep '[^a-z]nko'.txt
(unkoでなかった...)

※それじゃでないのか...

■文字系メタ文字

|メタ文字|意味|
| --- | --- | --- |
|.|任意の1文字|
|[文字文字文字]|[]のなかに含まれるいずれかの1文字|
|[^文字文字文字]|[]内の文字に含まれないいずれかの1文字|

位置に一致するメタ文字

位置に一致するメタ文字は他のメタ文字と組み合わせてマッチする箇所を指定する。''の中の入っている。

■ '^文字'(文字が行頭になるように指定)

'^文字'     {文字が先頭だから!)
$ ls  | grep '^un'*
unko.txt

↑行頭がunを指定して検索!
でたね!

■ '文字$'(文字が行末になるように指定)

'文字$'      {文字が最後だから!)
$ ls  | grep 'ko$'.txt
unko.txt

↑行末をkoを指定して検索!
でたね!

■位置に一致メタ文字

|メタ文字|意味|
| --- | --- | --- |
|'^文字'|文字が行頭になるように指定|
|'文字$'|文字が行末になるように指定|

まとめ

長いから続く^^

Discussion