我正在寻找sed
以下解决方案:
输入损坏:
A 123 dgbsdgsbg
A 345 gsgsdgdgs A 23
2 afaffaaf
A 324 fsgdggsdg A 345 avsa
fasf
预期产出:
A 123 dgbsdgsbg
A 345 gsgsdgdgs
A 232 afaffaaf
A 324 fsgdggsdg
A 345 avsafasf
如何将尾随A [0-9].*
附加到下一行的开头。到目前为止,我有:
$ sed -r 's/ (A [0-9]+.*)/\n\1/' file
A 123 dgbsdgsbg
A 345 gsgsdgdgs
A 23
2 afaffaaf
A 324 fsgdggsdg
A 345 avsa
fasf
答案 0 :(得分:3)
这可以是一个选项:
$ sed -r ':a;$!N;s/ (A [0-9]+.*)\n(.*)/\n\1\2/;ta;P;D' file
A 123 dgbsdgsbg
A 345 gsgsdgdgs
A 232 afaffaaf
A 324 fsgdggsdg
A 345 avsafasf
这是How to match newlines in sed的最后一个例子的改编:
sed ':begin;$!N;s/FOO\nBAR/FOOBAR/;tbegin;P;D'
# if a line ends in FOO and the next starts with BAR, join them
答案 1 :(得分:3)
你有没有尝试过:
sed -e :a -e '$!N;s/\([0-9]\)\n\([0-9]\)/\1\2/;ta' -e 'P;D'
示例:
$ cat input
abc 123
456
def
123
ghi 123
jkl 456
789
$ sed -e :a -e '$!N;s/\([0-9]\)\n\([0-9]\)/\1\2/;ta' -e 'P;D' input
abc 123456
def
123
ghi 123
jkl 456789
编辑:您稍后修改了问题中的示例。对于修改后的输入,请尝试:
$ sed -e 's/ \(A .*\)/\n\1/' -e :a -e '$!N;s/\n\([^A]\)/\1/;ta' -e 'P;D' newinput
A 123 dgbsdgsbg
A 345 gsgsdgdgs
A 232 afaffaaf
A 324 fsgdggsdg
A 345 avsafasf
答案 2 :(得分:3)
这可能适合你(GNU sed):
sed -r '$!N;s/ (A[^\n]*)\n/\n\1/;P;D' file