使用sed将一行的结尾附加到下一行的开头
我正在寻找以下方面的使用sed将一行的结尾附加到下一行的开头,sed,Sed,我正在寻找以下方面的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]
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
这可以是一个选项:
$ 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
这是对上一个示例的改编:
您是否尝试过:
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
这可能适用于您(GNU-sed):
Et tu,@devnull这是一种问题,我的大脑除了替换和其他一些技巧之外,还会切换到
awk
。我的sed
知识不会传播。请解释一下$!N和P;D
?@sudo\u O$!N
表示如果不是文件结尾,则在模式空间中的当前行追加一个换行符(\N
)和下一行P
表示打印到第一个换行符或图案空间的末端(以先到者为准),删除到并包括第一个换行符或图案空间的末端(以先到者为准)D
导致在删除前,如果模式空间中存在换行符,则自动读入下一行,直到未找到换行符为止。
$ 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
sed -r '$!N;s/ (A[^\n]*)\n/\n\1/;P;D' file