
Ich versuche, sed zu verwenden, um den Rest einer Zeile nach Folgendem zu entfernen: HTTP1.1" 200
Ich weiß nicht, wie ich sed dazu bringen kann, zu verstehen, dass ich das Ganze als übereinstimmende Zeichenfolge haben möchte, einschließlich der Anführungszeichen und des Leerzeichens.
Ein Beispiel möchte ich noch anführen:
"GET /images/loading.gif HTTP/1.1" 200 10819 "https://...
hinein
"GET /images/loading.gif HTTP/1.1" 200
Antwort1
Wenn Sie sed (oder die meisten anderen Tools) von der Kommandozeile aus verwenden, müssen Sie Zeichenfolgen mit Leerzeichen anführen. Und da Sie bereits doppelte Anführungszeichen verwenden, müssen Sie einfache Anführungszeichen verwenden:
echo '"GET /images/loading.gif HTTP/1.1" 200 10819 "https://...' | \
sed 's|HTTP/1.1" 200.*|HTTP/1.1" 200|'
gibt:
"GET /images/loading.gif HTTP/1.1" 200
Antwort2
Mit GNU grep:
| grep -o '.*HTTP/1\.1" 200'
Mit GNU sed:
| sed -r 's/(.*HTTP\/1\.1" 200).*/\1/'
Antwort3
Wenn Sie nach Ihrem übereinstimmenden String einfach ein Zeilenumbruch-Trennzeichen anhängen, können Sie P
nur einen bestimmten Teil des Musterraums ausschneiden, ohne ihn übermäßig ändern zu müssen. Dies kann normalerweise sogar funktionieren, wenn der Musterraum Bytes enthält, die nicht Teil eines Zeichens sind.
sed -n 's|HTTP/1.0” 200|&\n|;P' <in >out
Hinweis: portabel werden Sie anstelle des n
oben verwendeten ein wörtliches Newline-Zeichen verwenden wollen, obwohl es in einer GNU-Version funktioniert.sed