次の文字列があります。
-----BEGIN 1_1 CERTIFICATE-----
次のシーケンスはハイフンと一致しません。
grep -- "[A-Z\-\_]" file
\_
ハイフンを削除すると、次のようになります。
grep -- "[A-Z\-]" file
バックスラッシュを取り除くとなりますgrep: Invalid range end
。また、-E/egrep
使用するかどうかにかかわらず同じ結果が得られます。
この行動の理由は何ですか?
答え1
ハイフンを一致させる場合、[...]
ハイフンは最初または最後のハイフンでなければなりません。
grep '[A-Z_-]' ...
ハイフンが別の場所にある場合は、範囲を指定すると見なされます。
また、は\
リテラルなので[...]
(完全な式がシェルで引用された場合)[\-]
バックスラッシュやハイフン[\-_]
および可能であれば\
、、、]
または(^
ASCIIテーブルからからの_
範囲の文字である)と一致します。\
_