Entfernen einer neuen Zeile nach einem bestimmten Text über bash / awk / sed / perl

7

Ich möchte alle Zeilenumbruchzeichen entfernen, die nach einer bestimmten Zeichenfolge auftreten, und sie durch ein Tabulatorzeichen ersetzen. Sagen Sie zum Beispiel meine sample.txt ist wie folgt

%Vor%

Ich möchte, dass es

ist %Vor%

Wie mache ich das über bash / awk / sed? Hilf mir.

    
Greenhorn 15.12.2011, 11:45
quelle

8 Antworten

11

In awk:

%Vor%     
Michael J. Barber 15.12.2011, 11:50
quelle
6

Hier ist wie:

%Vor%

Mehr darüber, warum simple sed 's/foo\n/foo\t/g' hier nicht funktioniert: Ссылка

    
DejanLekic 15.12.2011 12:06
quelle
4
%Vor%     
codaddict 15.12.2011 11:51
quelle
2

Nicht alle Tools können den Zeilenumbruch ersetzen. Perl kann:

%Vor%     
Sjoerd 15.12.2011 11:47
quelle
2

Mmm. nicht sicher, dass dies Ihren Anforderungen entspricht, aber ich würde dies in vim tun:

%Vor%

Oder, wenn foo irgendwo in einer Zeile sein könnte:

%Vor%

Natürlich wird :%s/foo\n/foo\t/g auch gut funktionieren

    
sehe 15.12.2011 11:48
quelle
1
%Vor%

unten ist der Test.

%Vor%     
Vijay 15.12.2011 13:16
quelle
1

Dies könnte für Sie funktionieren:

%Vor%

Eigentlich:

%Vor%

Die letztere Lösung ist weniger effizient, aber nicht viel!

    
potong 15.12.2011 12:40
quelle
0

Die sed -Version sieht so aus

%Vor%

Wenn dies alles ist, was Sie in Ihrem sed-Befehl tun möchten, können Sie das obige auf einen Einzeiler vereinfachen:

%Vor%

Erklärung: N hängt eine neue Zeile und die nächste Eingabezeile an; y/\n/\t ersetzt alle Zeilenumbrüche durch Tabulatoren, oder s/\n/\t/ ersetzt den ersten Zeilenumbruch durch einen Tabulator.

Beachten Sie, dass, da sed zeilenorientiert ist, die Zeilenumbrüche in der Eingabe als Zeilentrennzeichen und nicht als Teil einer Zeile betrachtet werden (im Gegensatz zu Perl).

    
Toby Speight 22.07.2015 11:04
quelle

Tags und Links