Ich habe eine Reihe von Textdateien, die www.thethinkfoundation.org
beispielsweise mit der folgenden Zeile enden:
file1.www.thethinkfoundation.org.txt
file2.www.thethinkfoundation.org.txt
.
.
.
file100.www.thethinkfoundation.org.txt
Ich möchte entfernen/löschenwww.thethinkfoundation.org
Um dies zu erreichen, habe ich den folgenden Befehl in einem Terminal ausprobiert:
for f in www.thethinkfoundation.org*; do mv "$f" "${f#thethinkfoundation.org}"; done
Das Ergebnis war:
file1..txt
file2..txt
.
.
.
file100..txt
Vielen Dank im Voraus für eine funktionierende Lösung.
PS: Ich möchte den Befehl nicht verwenden rename
. Ich suche eigentlich nach einem, der unter Linux- und *BSD-Distributionen funktioniert. Mein bevorzugter Texteditor ist nano
.
Antwort1
Teilstring-Ersetzung basierend aufShell-Parametererweiterungin bash
und einigen anderen Shells kann auf zwei Arten erreicht werden:
Erstekönnen Sie ersetzennur das erste Vorkommen(von links nach rechts) eines Musters wie diesem:
${var/pattern/replacement}
Zweitekönnen Sie ersetzenalle Vorkommeneines Musters wie diesem:
${var//pattern/replacement}
Dabei var
handelt es sich um die Variable/den Parameter, der die Zeichenfolge enthält, und pattern
um das Muster, das Sie in dieser Zeichenfolge suchen und ersetzen möchten, sowie replacement
um den Ersatz, pattern
durch den Sie das ersetzen möchten. Dieses Feld kann auch leer gelassen werden, ${var//pattern/}
wenn Sie also einfach dieses Muster aus der Zeichenfolge löschen möchten.
Ihre Wunschlösung würde daher wie folgt aussehen:
for f in *www.thethinkfoundation.org*; do
echo mv -n -- "$f" "${f//www.thethinkfoundation.org./}"
done
Ich habe es echo
für einen Probelauf hinzugefügt, damit Sie es zuerst testen und dann herausnehmen echo
und erneut ausführen können, um die eigentliche Arbeit zu erledigen.