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?

Nicolas Kaiser
quelle
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" '{}' ';'
Stéphane Gimenez
quelle
0

Versuchen Sie eine Schleife wie:

find . -name '*.css' -or -name '*.js' | while read filename; do
  : $filename is the original file name
done

quelle