「[az] *」がアルファベットではなく文字列と一致するのはなぜですか?

「[az] *」がアルファベットではなく文字列と一致するのはなぜですか?

alphanum次の2行を含むファイルがあります。

123 abc
this is a line

を実行すると、なぜsed 's/[a-z]*/SUB/' alphanum次のような結果が出るのか混乱します。

SUB123 abc
SUB is a line

私はそれを楽しみにしています:

123 SUB
SUB is a line

修正(代わりに使用)が見つかりsed 's/[a-z][a-z]*/SUB/'ましたが、それがうまくいく理由と私がうまくいかない理由を理解できません。

助けてください?

ベストアンサー1

パターン[a-z]*マッチング若いaまたは範囲内の複数の文字z実際文字は現在のロケールによって異なります)。文字列の先頭にはこれらの文字がゼロ個123 abc(たとえばパターン一致)の先頭にはこれらの文字が4つありますthis is a line

少なくとも必要な場合一つ一致させてから、またはを使用するか、および[a-z][a-z]*を使用して[a-z]\{1,\}拡張正規表現を有効にします。sed -E[a-z]+

パターンが一致する位置を視覚化するには、各一致の周囲に括弧を追加します。

$ sed 's/[a-z]*/(&)/' file
()123 abc
(this) is a line

または、行全体で一致するすべての項目を表示します。

$ sed 's/[a-z]*/(&)/g' file
()1()2()3() (abc)
(this) (is) (a) (line)

最終結果を以下と比較します。

$ sed -E 's/[a-z]+/(&)/g' file
123 (abc)
(this) (is) (a) (line)

おすすめ記事