Ich möchte alle Schrägstriche aus einer Webadresse ersetzen.
Beispieladresse:https://example.com/sub/ordner/dateien/datei.txt
Erwartetes Ergebnis:beispiel.com-unterordner-dateien-datei.txt
Ich kann das https entfernen, aber die verbleibenden Schrägstriche scheine ich nicht durch Folgendes ersetzen zu können:
echo $(echo 'https://example.com/sub/folder/files/file.txt' | sed 's/http[s]*:\/\///')
Das Obige gibt mir nur dies:
example.com/sub/folder/files/file.txt
Das Hinzufügen eines zweiten Sed zum Ersetzen von Schrägstrichen entfernt nur den ersten. Was mache ich falsch?
Antwort1
Versuche dies:
echo "https://www.example.com/sub/folder/files/file.txt" | sed -e 's#http[s]://##' -e 's#/#-#g'
Das Ergebnis lautet: www.example.com-sub-folder-files-file.txt
der Grund, warum nur das „zuerst gefundene“ ersetzt wurde, liegt darin, dass Ihnen das „g“ als letzter an sed übergebener „Parameter“ fehlte. Es steht für „global“ und ersetzt alle gefundenen Instanzen durch den gewünschten Ersatz. Ohne dieses wird nur die erste gefundene Instanz ersetzt.
Außerdem ist es erwähnenswert, dass Sie die Parameter des sed-Befehls durch jedes beliebige Symbol trennen können, es muss nicht unbedingt „/“ sein. Ich bevorzuge die Verwendung eines Symbols, das an der Suche und dem Ersetzen überhaupt nicht beteiligt ist, da Sie sich dann nicht zu viele Gedanken über Shortcut-Zeichen machen müssen und potenzielle Fehler beim Ersetzen von „/“ vermeiden.
Sie können in sed auch einige Befehle aneinanderreihen, indem Sie die Option -e verwenden. Wie Sie oben sehen können, habe ich „https://“ durch nichts ersetzt (und es entfernt) und dann alle „/“ durch „-“ ersetzt. Einfach, einfach.
Hoffe es hilft dir
Antwort2
Du brauchst kein Doppeltes echo
.
Ich verstehe nicht, was du meinst mitDas Hinzufügen eines zweiten Sed zum Ersetzen von Schrägstrichen entfernt nur den ersten.- Sie haben in Ihrem Beispiel nur einen Befehl. Mit zwei Befehlen wie diesen sed
können Sie ganz einfach tun, was Sie wollen :sed
echo 'https://example.com/sub/folder/files/file.txt' | sed 's,http[s]*:\/\/,,;s,/,-,g'