Direktes Ersetzen von Zeilen, die mit einem Muster in einem bestimmten Satz von Dateien übereinstimmen


2

Nach meiner vorherigen Frage:

Entfernen Sie Schrägstriche / übergeordnete Pfade aus Dateinamen in CSS- und Javascript-Inhalten

Ich kam zu dem folgenden Befehl, der alle Dateinamen in diesen Dateien nur mit dem Basisnamen ersetzt:

grep -o -h -E '[A-Za-z0-9:./_-]+\.(png|jpg|gif|tif|css)' |\
  sed "s:[a-zA-z0-9]*/::" `find . -name '*.css' -or -name '*.js'` 

Wie speichere ich die Ausgabe dieses Befehls für jede verarbeitete Datei zurück in die Quelldatei?


1
Die -iOption in sed nimmt die Änderungen an Ihren Dateien vor. Können Sie versuchen, Ihre Bash-Linie zu ändern, um dies zu verwenden?

@Manny - Ich bekomme sed: 1: "./example.com-saved/example ...": ungültiger Befehlscode.

Antworten:


1

Späte Antwort auf eine alte Frage, aber ich denke, das ist die Antwort, nach der das OP gesucht hat:

SEDCMD="/[A-Za-z0-9:./_-]+\.(png|jpg|gif|tif|css)/ s:[a-zA-z0-9]*/::"
find . -name '*.css' -or -name '*.js' -exec sed -i "$SEDCMD" '{}' ';'

0

Versuchen Sie eine Schleife wie:

find . -name '*.css' -or -name '*.js' | while read filename; do
  : $filename is the original file name
done
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.