文字クラス
[クラス]
いずれか1文字[^クラス]
それら以外の1文字-
文字範囲[:既定クラス:]
[クラス]
文字クラス
[
と]
内に列挙して指定- 文字
- 文字範囲
- 既定クラス
- いずれか1文字にマッチ
echo '赤色 緑色 青色 青春' | \
egrep --only-matching '[赤青]色'
赤色
青色
エスケープ不要
.
などたいていの記号
- ただの文字列扱い
echo 'my.js
myjs' | egrep '[.]js'
my.js
例外: ^
-
]
[]
表現で特殊文字としての意味を持つ- 文字列扱いにするなら配置場所を調整
^
: 先頭以外に置く-
: 末尾に]
: 先頭に
^
と-
はエスケープでも可
echo '- ^ ]' | egrep --only-matching '[]^-]'
-
^
]
[^クラス]
否定文字クラス
- 指定したもの以外の1文字にマッチ
echo '赤色 緑色 青色 緑化' | \
egrep --only-matching '[^赤青]色'
緑色
-
文字範囲
- 文字クラスで、文字を範囲指定できる
- 範囲はロケールによる
文字範囲の例
[0-9]
: 数字[1-3]
: 123のどれか[a-z]
: 英字の小文字[a-cA-C1-3]
: abcABC123のどれか[ぁ-んァ-ヴー]
: ひらがな、カタカナ、ー(長音)
echo '0aAぁあァア' | \
egrep --only-matching '[ぁ-ん]'
ぁ
あ
[:既定クラス:]
既定の名前の付いたクラス
これを
[]
内に入れるので、括弧が二重になる[:既定クラス:]
ではなく[[:既定クラス:]]
のように
ドキュメント:
info -f 'grep' -n 'Character Classes and Bracket Expressions'
英数字
[:alnum:]
: 英数字、[0-9A-Za-z]
と同じ[:alpha:]
: 英字[:digit:]
: 数字[:lower:]
: 小文字[:upper:]
: 大文字[:xdigit:]
: 16進数、[0-9A-Fa-f]
と同じ
既定クラスを複数使うと
echo '0Aぁaあァア' | \
egrep --only-matching '[[:lower:][:digit:]ア]'
0
a
ア
否定文字クラスで使うと
echo '0Aぁaあァア' | \
egrep --only-matching '[^[:lower:][:digit:]ア]'
A
ぁ
あ
ァ
- 英数字は文字範囲で指定した方が見やすい
記号など
[:blank:]
: スペースとタブ
# -eで特殊文字(\t)(タブ)を有効に
echo -e 'a x
b\ty' | \
egrep --only-matching '[ab][[:blank:]][xy]'
a x
b y
[:punct:]
: 記号! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
- スペースやタブにはマッチせず
echo "! \" # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ \` { | } ~" | \
egrep --only-matching '[[:punct:]]'
# 全部マッチ