スペースが追加されるのはなぜですか? echo "x軸"| sed 's/x\s*/x /'

スペースが追加されるのはなぜですか? echo

x1つを見つけて、次の0個以上のスペース(\s*)を1つのスペースに置き換えたいと思います。

echo "x ax" | sed 's/x\s*/x /'

何らかの理由でスペースを単一のスペースに置き換える代わりに、以前に存在していた複数のスペースにスペースを追加します。

x  ax

フラグをどのように使用しても、+代わりに使用することはまったく意味がないようです。*-E

sed貪欲ではない表現を実行しないようですが、なぜマッチング時に空白を*すべて消費しないのですか?

私はbashではなく設定の正規表現の忍者ですが、bashとそのツールは私を山菜に食べます。成功した検索エンジンクエリのためにこれをどのように簡潔に表現するのかわかりません。

ベストアンサー1

sed期待する基本正規表現(着替え)。\sBREの標準特殊構造ではありません。むしろ(その問題について)これは、一部の言語、特にPerl(他の多くの言語がこれを模倣する)の拡張です。 sedでは、実装に応じて\sリテラル文字列\sまたはリテラル文字を表しますs

実装では\smatch のように見えるので0 以上と一致しs、サンプル入力では matchなので に変換されます (等に変換されます)。他の実装(たとえば、GNU sedを使用)ではmatchなので、一致の後にゼロ個以上のバックスラッシュが続きます。これは入力には表示されないため、行は変更されません。\s*sx\s*xx axx axxyx y\s\s\s*s

これは貪欲とは関係ありません。貪欲は、文字列が正規表現と一致するかどうかには影響せず、一致からキャプチャされる文字列部分にのみ影響します。

おすすめ記事