2017-09-28 2 views
0

von der folgenden URL zu extrahieren:bash regexp Teil der URL

https://console.developers.google.com/storage/browser/test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/]

Ich brauche den folgenden Teil zu extrahieren:

test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/

ich regex ziemlich schlecht bin. Ich kam mit dem folgenden, aber es funktioniert nicht:

sed -n "s/^.*browser\(test-lab.*/.*/\).*$/\1/p" 

Kann mir jemand helfen, was ich falsch mache?

Antwort

1

Könnten Sie bitte versuchen Sie mit awk Lösung auch und lassen Sie mich wissen, ob dies Ihnen hilft.

echo "https://console.developers.google.com/storage/browser/test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/" | awk '{sub(/.*browser\//,"");sub(/\/$/,"");print}' 

Erläuterung: einfach, ersetzt alles bis browser/ dann letzte / mit NULL zu ersetzen.

EDIT1: Hinzufügen einer Sed-Lösung auch hier.

sed 's/\(.[^//]*\)\/\/\(.[^/]*\)\(.[^/]*\)\(.[^/]*\)\/\(.*\)/\5/' Input_file 

Die Ausgabe wird wie folgt sein.

test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/ 

Erklärung der sed-Befehl: die ganze Linie in Teile geteilt und sed Fähigkeit, die angepasst regex in den Speicher zu halten verwenden, sind so hier die Teiler I verwendet.

([^ //].): *, die den Wert bis https haben: in ihm, und wenn jemand will, um es drucken könnten Sie \1 dafür verwenden, da diese erste Puffer ist für sed.

//: nun per URL // kommt sie jetzt zu erwähnen.

([^ /].): * Jetzt kommt den zweiten Teil für Puffer des sed, den Wert console.developers.google.com darin haben wird, weil REGEX für erstes Auftreten von / sieht und hört auf passende dort selbst.

(. [^ /]) & & (. [^ /] ) & &/(.): * Diese nächsten 3 Vorkommen funktioniert auf die gleiche Methode zum Speichern von Puffern wie sie für das erste Vorkommen von / suchen und den Wert vom letzten übereinstimmenden Buchstaben das nächste Vorkommen bis zum 1. / kommt.

/\ 5 /: Jetzt ist mir ersetzt alles mit \5 bedeutet fünfte Puffer, die Werte wie pro OP Anweisungen enthält.

+1

Danke hilft –

+0

@AnkitGupta, froh, dass es Ihnen geholfen hat, fügte ich auch Erklärung hinzu. Lassen Sie es mich wissen, wenn Sie Fragen dazu haben. Lernen Sie weiter und teilen Sie Ihr Wissen, haben Sie einen schönen Tag. – RavinderSingh13

1

Verwenden Sie ein anderes sed-Trennzeichen und vergessen Sie nicht, die Klammern zu entfernen.

avinash:~/Desktop$ echo 'https://console.developers.google.com/storage/browser/test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/]' | sed 's~.*/browser/\([^/]*/[^/]*/\).*~\1~' 
test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/ 

OR

Verwenden grep mit oP Parametern.

avinash:~/Desktop$ echo 'https://console.developers.google.com/storage/browser/test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/]' | grep -oP '/browser/\K[^/]*/[^/]*/' 
test-lab-acteghe53j0sf-jrf3f8u8p12n4/2017-09-27_15:23:07.566833_MPoy/