2016-10-25 3 views
0

ich dieses Codefragment haben:wie einen Zeilenvorschub in eine Sed Linie Verkettung einfügen

cat testfeed.txt | sed '${H;z;x;s/\n//g;p;};/0$/!{H;d;};/0$/{H;z;x;s/\r//g;}' 

, die meine Eingabe alle nimmt und schafft eine lange Geschichte. Was ich will, ist Rekord verketten ein mit Aufzeichnungen zwei

so dass:

1. 

My first line 

2. 

My Second line 

wird:

1. My First line 

2. My Second line 

Statt:

1. My First line. 2. My Second line 

Ich fühle mich ich sein sollte kann einen Zeilenvorschub einfügen, aber mein Wissen über sed ist bestenfalls schlecht :(

Jede Hilfe wäre willkommen.

+0

so ermitteln Sie den _first wollen 2_ Linien auf ihre eigenen Linien gelassen werden, aber alle übrigen mit jeweils einem Leerzeichen verbunden, so dass du insgesamt _3_ Zeilen hast? – mklement0

+0

Es wäre gut, die angenommene Antwort zu markieren (oder), wenn Sie annehmen, dass Ihr Problem jetzt gelöst ist.Auch wenn Sie es akzeptieren, kann es für andere nützlich sein. – Inian

Antwort

0

Wenn Sie gerne eine awk Lösung zu akzeptieren, können Sie es tun, wie

awk 'NF{getline empty;getline line;printf("%s %s\n",$0,line)}' input-file 
1. My first line 
2. My Second line 

Und Ihre input-file

$ cat input-file 
1. 

My first line 

2. 

My Second line 

Die Logik zu sein, ist ziemlich-einfach.

  • NF{.. ist die Aktionen folgenden gelten nur für nicht-leeren Zeilen
  • getline empty;getline line; bekommt die Zeile und Zeile + 1 und speichert in den awk Variable und printf druckt die Variable entsprechend zu gewährleisten.

Wenn Sie eine neue Zeile nach jeder Zeile wollen, fügen Sie einfach einen weiteren '\ n' in printf als printf("%s %s\n\n",$0,line)

awk 'NF{getline empty;getline line;printf("%s %s\n\n",$0,line)}' input-file 
1. My first line 

2. My Second line 
0
$ cat testfeed.txt 
1. 

My first line 

2. 

My Second line 

mit sed

$ sed 'N;N; s/\n\s*\n/ /; N' testfeed.txt 
1. My first line 

2. My Second line 
  • N;N; bekomme zwei weitere Zeilen, also insgesamt drei Zeilen
  • s/\n\s*\n/ / aus diesen drei Linien, ersetzen erste Auftreten von \n\s*\n mit einem Raum ... zum Beispiel, dieses Ende der Linie entsprechen würde 1. und die leeren Zeile enthält, das (die \s Zeichen enthalten folgt, kann, wenn Leitung entfernt werden, hat nicht \s Zeichen)
  • der letzte ; N wird eine weitere Zeile erhalten, so dass im nächsten Spiel von Zeile beginnt enthält 2.
+0

können Sie bitte erklären Sie Ihre sed Befehl .. –

+0

@VIPINKUMAR hinzugefügt Erklärung .. – Sundeep

Verwandte Themen