5

パターンに基づいて sed を使用してファイルの行をマージする必要があります。例えば:

入力ファイル:

X1 A B C D E F

\+ G H I J 1 

\+ LK T PP E OO 2

X2 DDF F Y 

\+ J W Q 

....

期待される出力:

X1 A B C D E F G H I J 1 LK T PP E OO 2

X2 DDF F Y J W Q 

..

vi エディタで wat と同等の機能を実現したい (:%s/\n+/ /g)

Webを検索すると、論理的に機能するはずの解決策が見つかりました

sed -e '{:a; N; s/\n+//g; ta}' インファイル

しかし、このコマンドは私の理解と論理に反しており、出力を生成しました

X1 A B C D E F

\+ G H I J 1 LK T PP E OO 2
X2 DDF F Y 

\+ J W Q 

....

どんなアイデアでも大歓迎です。事前に感謝します

シュリシュリヤ

4

3 に答える 3

20

これはあなたのために働くかもしれません:

sed ':a;$!N;s/\n+//;ta;P;D' file

説明:

  • :aループのプレースホルダーです
  • $!Nファイルの終わりでない場合、次の行を現在の行に追加することを意味します。
  • s/\n+//プラス記号が続く行の終わりを削除することを意味します
  • taa最後の置換が機能したかどうかを意味し、ループ プレースホルダーに分岐します
  • P最初の改行まで出力します。
  • D最初の改行まで削除します。
于 2012-07-02T09:10:00.270 に答える
2

別の awk ワンライナー:

awk 'BEGIN{RS="  "}{gsub(/\n\n\+/,"")}1' yourFile
于 2012-07-02T09:25:49.043 に答える
0

potongの答えは私にはうまくいきませんでしたが、似たようなものがあります:

sed -e :a -e '$!N;s/\n+//;ta' -e 'P;D' file

良い sed ドキュメント: http://sed.sourceforge.net/sedfaq3.html

于 2014-01-22T23:19:17.053 に答える