Frage

Ich möchte eine Datei mit einer HTTP-Antwort in zwei Dateien aufteilen:eine enthält nur HTTP-Header und eine enthält den Nachrichtentext.Dazu muss ich eine Datei in der ersten leeren Zeile in zwei Teile aufteilen (oder für UNIX-Tools in der ersten Zeile, die nur CR = ' enthält)\r' Zeichen) mit a Shell-Skript.

Wie geht das auf portable Art und Weise (zum Beispiel mit sed, aber ohne GNU-Erweiterungen)?Man kann davon ausgehen, dass eine leere Zeile nicht die erste Zeile in einer Datei wäre.Eine leere Zeile kann zu einer, keiner oder beiden Dateien gelangen;es ist mir egal.

War es hilfreich?

Lösung

$ cat test.txt
a
b
c

d
e
f
$ sed '/^$/q' test.txt 
a
b
c

$ sed '1,/^$/d' test.txt 
d
e
f

Ändern Sie den /^$/ /^\s*$/, wenn Sie dort erwarten auf der Leerzeile Leerzeichen sein kann.

Andere Tipps

Sie können verwenden csplit:

echo "a
b
c

d
e
f" | csplit -s - '/^$/'

Oder

csplit -s filename '/^$/'

(vorausgesetzt, der Inhalt von „Dateiname“ ist mit der Ausgabe des Echos identisch) würde in diesem Fall zwei Dateien mit den Namen „xx00“ und „xx01“ erstellen.Das Präfix kann beispielsweise mit von „xx“ in „outfile“ geändert werden -f outfile und die Anzahl der Ziffern im Dateinamen könnte mit auf 3 geändert werden -n 3.Sie können einen komplexeren regulären Ausdruck verwenden, wenn Sie mit Macintosh-Zeilenenden umgehen müssen.

Um eine Datei an jeder leeren Zeile zu teilen, können Sie Folgendes verwenden:

csplit -s filename '/^$/' '{*}'

Das Muster '{*}' bewirkt, dass das vorhergehende Muster so oft wie möglich wiederholt wird.

In Anbetracht des awk-Skript

BEGIN { fout="headers" }
/^$/ { fout="body" }
{ print $0 > fout }

awk -f foo.awk < httpfile die beiden Dateien headers und body für Sie schreiben.

Sie können den ersten Teil Ihrer Datei extrahieren (HTTP-Header) mit:

awk '{if($0=="")exit;print}' myFile

und der zweite Teil (HTTP Körper) mit:

awk '{if(body)print;if($0=="")body=1}' myFile
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top