したがって、コマンドは次のようになります。
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/"
。+
一つ以上一致します。つまり、置換する数値が見つからない場合は、空の文字列と一致しません。