2

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
4

3 に答える 3

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
于 2013-10-07T09:47:00.523 に答える
3

これはうまくいくかもしれません(GNU sed):

 sed -r '$!N;s/ (A[^\n]*)\n/\n\1/;P;D' file
于 2013-10-07T16:37:08.507 に答える
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
于 2013-10-07T09:52:10.827 に答える