• ベストアンサー

viで一括で行をつなげたい

viエディタで、 :%s/???/???/g とかで、行を繋げることはできないでしょうか。 行の最後がある特定の文字列がきた場合には、 (もしくは全ての行の) 行と行をつなげる(改行をなくす)という意味です。 viで「Shift+J」で1行単位でできるのは知ってるのですが 一括置換したいです。 もし、viでなくても他のテキストエディタ等で方法があれば 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

viということは、Unix/Linuxベースの話でしょうか。 それならば、単に全ての改行をなくすのであれば、エディタの置換機能を使わなくても、 awk '{printf($0)}' aaa.txt > bbb.txt などの方法でできると思います。 「行の最後がある特定の文字列がきた場合」というのは具体的にどういうことでしょう。特定の文字列が来たときは改行を削除して行をつなげ、文字列がないときはそのまま改行する、ということでしょうか? たとえば行の最後がxxxで終わっている場合だけ改行を削除するのであれば、 awk '{if ($0 ~ /xxx$/) {printf($0)} else {print}}' aaa.txt > bbb.txt という方法でできると思います。

hatena66
質問者

お礼

ありがとうございます!!! できました!awkでできてしまうんですね。

すると、全ての回答が全文表示されます。

その他の回答 (4)

noname#39970
noname#39970
回答No.5

もう解決したのかな・・・ 正規表現が使えるテキストエディタでの改行が何になるかはそのエディタによってまちまち。 それはヘルプを見ると書いてあるよ。 でも大抵は「\n」 物によっては「\r」 ちょっと癖のあるものだとCRとLFが別になっていて「\r\n」としなければならない場合も。

hatena66
質問者

お礼

ありがとうございます。解決しました。

すると、全ての回答が全文表示されます。
回答No.4

#3です。すみません。訂正です。 ×コマンドモードの状態から「1,$g/LAST$/j」 ○コマンドモードの状態から「:1,$g/LAST$/j」

すると、全ての回答が全文表示されます。
回答No.3

g(グローバル)コマンドを使います。 例えば、「LAST」で終わる行を連結する場合、 コマンドモードの状態から「1,$g/LAST$/j」 とタイプします。 ちなみに上の例の場合「1,$」で全ての行が対象になるので、 行範囲を指定したい場合は、代わりに「200,300」等とします。 あと、これは蛇足かもしれませんが、 ただ単にたくさんの行を連結したいが、 「J」をたくさんタイプするのが面倒だという意味なら、 「30J」(30行連結)とします。

hatena66
質問者

お礼

情報ありがとうございます。 というか30Jなんてできるんですね。知らなかった…

すると、全ての回答が全文表示されます。
noname#39970
noname#39970
回答No.1

OSが良くわからないけど? 「正規表現」が使えるフリーのテキストエディタでなら大抵できるよ。 viでは・・・置き換え使わないから判らない・・・ごめん http://www.vector.co.jp/vpack/filearea/win/writing/edit/

hatena66
質問者

お礼

回答ありがとうございます。 OSは、WindowsかUNIXのどちらかです。 今正規表現が使えるテキストエディタをインストールしてはみたのですが、 「改行」の正規表現がわかりません。。。 教えていただけますか?

すると、全ての回答が全文表示されます。

関連するQ&A