sed: conditional merge of multiple lines
line, merge, sed
Solution
This might work for you:
sed ':a;$!N;s/\n+//;ta;P;D' file
explanation:
- `:a` is a loop placeholder
- `$!N` means if not end-of-file append next line to current line.
- `s/\n+//` means delete an end on line followed by a plus sign
- `ta` means if last substitution worked branch to `a` loop placeholder
- `P` print upto the first newline.
- `D` delete upto and including the first newline.
Problem
I need to merge line of a file using sed based on a pattern. eg: Input File: ``` 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 ``` .... OutPut Expected: ``` 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 .. ``` I would like to equivalent of wat is possible in vi editor (:%s/\n+/ /g) Searching the web I found a solution, which logically should have worked sed -e '{:a; N; s/\n+/ /g; ta}' infile But this command defies my understanding and logic, and has produced output ``` 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 ``` ....