sed で改行を消してCSVにしたい。
コマンドの結果の改行を消してCSVのようなカンマ区切りに変換したい。
他の置換ツールや python / ruby のワンライナーに回せばいいと思うけど、sedでできたほうが汎用性が高そう。そのためsedで改行を置換、改行を別の文字に変えてCSVのような文字区切りをやってみる。
sed は行ごとの処理
sed は、「行ごと」で処理するのが基本動作なので、改行にマッチとか、改行を削除することはできない。
grep でもそうなんだけど、行処理が暗黙の前提なものを全体マッチにするときは、ちょっとオプションを見てあげると解決。
全体にマッチする。
マッチする箇所を「全体」に設定してあげるといい。
networksetup -listallnetworkservices | \grep -v as | sed -z 's/\n/,/g'
-z オプション
-z オプションを使って、複数行に亘るマッチングができる。z は「全文・全体」と覚えれば絶対に忘れない。
bsd sed / gnu sed
macos で試したが、 -z があるのは GNU sed のみ。
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g'
macの場合は、brew で gnu sed ( gsed ) をインストールしてもいいですね。