sed:コロンの周りにスペースを追加する

sed:コロンの周りにスペースを追加する

周囲にスペースがないコロンを見つけたら、コロンの前後にスペースを入れるsedコマンドを作成しようとしています。つまり、次のようにabc:def変換しますabc : def

echo "abc:def" | sed -e 's/[^\s]\+:[^\s]\+/ : /g'

出力はまだですabc:def。どうすればいいですか?上記のコマンドにはどのような問題がありますか?

ベストアンサー1

\s空白表現sedは移植可能ではありません。たとえば、POSIX実装では式が一致しません(GNU sed、posixモード)。

$ echo "abc:def" | sed --posix -e 's/[^\s]\+:[^\s]\+/ : /g'
abc:def

しかし、あなたの表情ならした一致すると、シーケンス全体を置き換えるため、目的の操作は実行されません(たとえば、非posixモードのGNU sed)。

$ echo "abc:def" | sed -e 's/[^\s]\+:[^\s]\+/ : /g'
 : 

おそらくあなたが望むものはs/\([^[:blank:]]\):\([^[:blank:]]\)/\1 : \2/例えば

$ echo "abc:def" | sed -e 's/\([^[:blank:]]\):\([^[:blank:]]\)/\1 : \2/g'
abc : def

[私の知る限り、\+移植性のない反復演算子は不要です。 ]

おすすめ記事