[0-9]*が数字なしでどこにも一致するのはなぜですか?

[0-9]*が数字なしでどこにも一致するのはなぜですか?

したがって、コマンドは次のようになります。

echo "abc 123" | sed "s/[0-9]*/h/g"

私が得た結果は次のとおりです。

hahbhch h

この出力をどのように取得しますか?

私が望む出力はabc hです。

このコマンドで得られるものは次のとおりです。

echo "abc 123" | sed "s/[0-9][0-9]*/h/g"

誰かがこれを説明できますか?

ベストアンサー1

これは*、ゼロ以上の一致をできるだけ早く意味します。gフラグなしでコマンドを実行すると(つまりsed、最初の置換後に停止することを意味します)、出力が得られますhabc 123。左から右に読み始めるのに一致しないので、行の先頭にaのみ一致し、そこで停止するからです。

global( g) フラグを使用すると、文字列の残りの部分と一致しようとし、*他のものと一致できない場合は空の文字列と一致するため、hより多くの数字と一致できない場合は1つずつ配置されます。

2番目の試みは次のとおりですsed "s/[0-9]\+/h/"+一つ以上一致します。つまり、置換する数値が見つからない場合は、空の文字列と一致しません。

おすすめ記事