2017-01-13 9 views
1

ich voller Urls eine Datei, die wie folgt aussieht:Teile url ersetzen in einer Datei sed

https://testing/this/string/for/now 

, die ich brauche sie alle speziell mit sed ersetzt zu haben, zu:

https://testing/this/now 

und speichern Sie die Datei am Ende mit dem aktualisierten Inhalt. Also entfernen Sie eigentlich was auch immer Inhalt in der 'Zeichenfolge' und 'für' (egal wie ihre Länge sein könnte), aber halten Sie die letztere 'jetzt' Teil der URL.

Vielen Dank im Voraus.

Vincent

+0

Beginnen sie alle mit 'https: // testing /'? – anubhava

+0

Ja. Eigentlich beginnen alle mit https: // testing/this/ Nicht sicher, wie https hier erscheinen. – vincent

Antwort

0

können Sie diesen sed Befehl 2 Pfade nach https://testing/this/ entfernen:

sed -i.bak 's|\(https://testing/this/\)[^/]*/[^/]*/|\1|'' file 

Erläuterung:

\(https://testing/this/\) # match and group https://testing/this/ 
[^/]*/      # match 0 or more of any character that is not/
[^/]*/      # match 0 or more of any character that is not/

In Ersatz sind wir \1 verwendet, die wieder -Bezug auf die erste Erfassungsgruppe.

Beispiel:

s='https://testing/this/string/for/now' 
sed 's|\(https://testing/this/\)[^/]*/[^/]*/|\1|' <<< "$s" 
https://testing/this/now 
+0

Ich rate davon ab, Tilde als Trennzeichen für diese Art von Muster zu empfehlen, da Tilde der Standardbenutzerverzeichnisindikator in URLs ist. – ghoti

+0

Darf ich Sie bitte bitten, eine Erklärung zu geben, wie ich vor kurzem in sed eingeführt wurde und ich mich bemühe, um es zu begreifen. Zum Beispiel, was bedeutet ~ am Anfang und am Ende des Ausdrucks? – vincent

+0

Auch, was ist mit dem nächsten Teil [^ /] */[^ /] */~ \ 1 ~ – vincent

0

Hier ist eine einfache Lösung cut mit:

# echo https://testing/this/string/for/now | cut -d/ -f1-4,7 
https://testing/this/now 

eine Datei zu bearbeiten, nur cut -d/ -f1-4,7 <input.txt> output.txt laufen.