sedコマンドで改行が消せない!ときの対処法

sed コマンドで置換をしていて、ハタと困りました。

改行を消すことができないのです。

つまり、「置換前」の文字列の中に改行文字を入れることにより、改行を置換対象に含めて消す、ということをやろうと思ったのですが、そのように動いてくれないようでした。

(「置換後」文字列の中なら、改行文字入れられるのになんで…?)

そこで、sed コマンドを perl コマンドに変えるとうまくいきました。という話。

スポンサーリンク

やりたいこと

次のようなテキストファイル test があったとします。

aaaaa の列の後ろの改行を消したいのです。ただそれだけ。

問題点

そう思って次のような sed コマンドを書いてもうまくいかない。

無視されます。

解決方法

少し調べたところ、perl コマンドが代わりに使えそうです。

perl -pe とすると、ほぼ sed と同じように置換処理ができ、さらに色々な場面で sed より高度な置換ができるとか。

そこで、単に sed -e を perl -pe に置き換えたら、うまく行きました。

ありがとう perl -pe さん!

謝辞

次のサイトを参考にしました。ありがとうございます。

##改行の置換改行の置換は、非常に厄介です。改行を表す文字コードは、`CR+LF`などがそれにあたります。正規表現は、Linuxの場合は、`\n`です。Macの場合は、`\r`です。注意としてはここでの`¥`は`\`(小文字)...

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク