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)