512 Stimmen

Nicht gieriger (zurückhaltender) Regex-Abgleich in sed?

Ich versuche, sed zu verwenden, um Zeilen von URLs zu bereinigen, um nur die Domain zu extrahieren.

Also von:

http://www.suepearson.co.uk/product/174/71/3816/

Ich will:

http://www.suepearson.co.uk/

(entweder mit oder ohne den abschließenden Schrägstrich, es spielt keine Rolle)

Ich habe es versucht:

 sed 's|\(http:\/\/.*?\/\).*|\1|'

und (unter Auslassung des nicht-gierigen Quantors)

sed 's|\(http:\/\/.*\?\/\).*|\1|'

aber ich scheine den nicht-gierigen Quantifizierer nicht zu bekommen ( ? ), um zu funktionieren, so dass am Ende immer die ganze Zeichenfolge übereinstimmt.

68 Stimmen

Eine Randbemerkung: Wenn Sie Ihre Regexe mit "|" abgrenzen, brauchen Sie die "/"s nicht zu escapen. Tatsächlich grenzen die meisten Leute mit "|" anstelle von "/" ab, um die "Zäune" zu vermeiden.

15 Stimmen

@AttishOculus Das erste Zeichen nach dem 's' in einem Ersatzausdruck in sed ist das Trennzeichen. Daher funktionieren auch 's^foo^bar^' oder 's!foo!bar!'

1 Stimmen

Für erweiterte Regex, verwenden Sie sed -E 's... . Dennoch, kein unwilliger Betreiber.

0voto

user2679290 Punkte 97

Leider wird dies, wie bereits erwähnt, in sed nicht unterstützt. Um dies zu überwinden, schlage ich vor, die nächstbeste Sache zu verwenden (eigentlich sogar besser), um vim sed-ähnliche Fähigkeiten zu verwenden.

einteilen .bash-profile

vimdo() { vim $2 --not-a-term -c "$1"  -es +"w >> /dev/stdout" -cq!  ; }

Das erzeugt einen kopflosen vim, um einen Befehl auszuführen.

Jetzt können Sie zum Beispiel tun:

echo $PATH | vimdo "%s_\c:[a-zA-Z0-9\\/]\{-}python[a-zA-Z0-9\\/]\{-}:__g" -

zum Herausfiltern von Python in $PATH .

使用方法 - um eine Eingabe aus der Pipe in vimdo zu erhalten.

Die Syntax ist zwar größtenteils gleich. Vim bietet mehr fortgeschrittene Funktionen, und die Verwendung von \{-} ist der Standard für nicht-gierige Übereinstimmung. siehe help regexp .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X