sed, um alles nach einer Zeichenfolge zu entfernen?

sed, um alles nach einer Zeichenfolge zu entfernen?

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 Pnur 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 noben verwendeten ein wörtliches Newline-Zeichen verwenden wollen, obwohl es in einer GNU-Version funktioniert.sed

verwandte Informationen