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

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

答え2

努力する:

echo "abc:def" | sed 's@\([^\s]\):\([^\s]\)@\1 : \2@g'

私はこれをGNU sedでテストしましたが、これがBSD sedの場合であるかどうかはわかりません。

元の一致の一部を維持するには、現在実行中のアクションであるキャプチャグループが\(...\)必要\1です\2。また、+最も近い隣人にのみ興味があるため、修飾子は必要ありません。

関連情報