2017-11-28 3 views
1

Ich habe versucht, herauszufinden, wie ich bestimmte Zeichenfolgen in CSS-Dateien, die die gleiche Zeichenfolge CSS-Variable, die ich ersetzen möchten, ersetzen durch mehrere Dateien gleichzeitig mit Bash ersetzen möchten, zu vermeiden die mühsame Aufgabe, jede Instanz der CSS-Datei in jedem Verzeichnis zu öffnen, nur um bestimmte Zeichenfolgen in diesen CSS-Dateien zu ersetzen.Ersetzen mehrerer CSS-Stil Zeichenfolgen mit sed

in meinen CSS-Dateien Ich möchte bestimmte Zeilen im CSS-Code auskommentieren, aber ich habe Probleme, bestimmte Zeichen zu umgehen und diese Zeile mit einer auskommentierten Zeile zu konvertieren, dh; outline-style: dashed; mit /*outline-style: dashed;*/

ich kann nicht herausfinden, wie die : und ; Zeichen zu entkommen, sowie die folgenden zur Kommentierung aus Linien /* */, was ich bisher ausprobiert habe, aber für mich nicht arbeitete, war die folgende unter Verwendung xargs mit Perl;

find . -type f | xargs perl -e 's/outline-style dashed;/\/*outline-style dashed;*/\/g;' 

aber dies gibt eine Fehlermeldung,

Backslash found where operator expected at -e line 1, near "s/outline- 
style dashed;/\/*outline-style dashed;*/\" 
syntax error at -e line 1, near "s/outline-style dashed;/\/*outline- 
style dashed;*/\" 
Search pattern not terminated at -e line 1. 
xargs: perl: exited with status 255; aborting 

ich auch mit der Verwendung von sed versucht, die mit

indem Sie versuchen, für die meisten einfach von Ersatz zu funktionieren scheint
find . -type f -exec sed -i 's/$^outline-style\: dotted\;/\/*outline-style\: dotted\;/g' *.{css} \; 

aber nicht ziemlich Arbeit, das gibt nur Fehler zurück, die sagen sed: can't read *.{css}: No such file or directory

Ich versuchte Witz hout die *.{css} dort hinzufügen, aber immer noch gibt mir die gleichen Fehler, aber ohne Ausgabe Änderungen an einer der CSS-Dateien.

Antwort

1

Wenn Sie keine Verzeichnisse mit CSS-Endung haben, können Sie diese verwenden:

shopt -s globstar 
sed -i 's/^outline-style: dashed;$/\/*outline-style: dashed;*\//' **/*.css 

Oder Sie können Ihre find Beispiel wie folgt bearbeiten:

find . -type f -name '*.css' -exec sed -i 's/^outline-style: dashed;$/\/*outline-style: dashed;*\//' {} + 

Beachten Sie, dass bestimmte Zeichen in der Tat müssen entgangen sein, z. B. Schrägstrich.

+0

hmm scheint, dass diese auch nicht funktionieren, es schreibt nicht in die CSS-Dateien, aber sie stellen nicht einmal Fehler dar, was bedeutet, dass sie ausgeführt wurden, aber sie haben nichts getan. –

+1

@ user94959 Wenn die Linie genau im Umriss-Stil: gestrichelt ist, sollten beide korrekt funktionieren. Benutzt du Tabs oder etwas, das nicht im Sed enthalten ist? – PesaThe

+1

@ user94959 Beachten Sie, dass dies auch fehlschlägt, wenn Ihre Daten DOS-Endzeilenzeichen haben. In diesem Fall müssten Sie die Dateien entweder in das Unix-Format konvertieren oder das '\ r'-Zeichen in Ihrem' sed' hinzufügen. – PesaThe