2016-11-22 4 views
0

I Millionen generierten SVG-Dateien von DOS auf eine Linux-Box übertragen und erkennen, dass es ein^@ als das letzte Zeichen von jeder Datei (das DOS Dateiende Zeichen) das gibt einen Fehler, wenn ich versuche, die SVG-Datei in einem Browser anzuzeigen.entfernen DOS Dateiende Zeichen aus vielen Dateien in Linux

In dieser Frage: How can I remove the last character of the last line of a file?

Maroun gibt die Lösung als:

sed '$ s/.$//' your_file 

Aber wenn ich es ändern wie folgt aussehen:

sed '$ s/.$//' *.SVG 

oder

find . -print | grep .SVG | sed '$ s/.$//' 

Es funktioniert nicht.

Ich möchte auch angeben können, dass es nur das letzte Zeichen löschen soll, wenn es das^@ ist.

Kann mir bitte jemand sagen, was ich falsch mache oder wie diese Arbeit zu bekommen. Die SVG-Dateien befinden sich in Tausenden von Unterverzeichnissen, so dass ich die Änderung von oben nach unten in der Baumstruktur vornehmen kann.

+0

Siehe auch: [? Wie kann ich dos2unix auf ein ganzes Verzeichnis ausgeführt] (http://stackoverflow.com/q/11929461/3776858) – Cyrus

Antwort

1

Ich vermute, Ihr erstes Beispiel nicht funktioniert, weil es nur die letzte Datei von *.SVG erweitert nehmen. Das zweite Beispiel (der mit dem find Befehl) schlägt fehl, weil Sie finden die Ausgabe auf sed anstelle der Dateiinhalt übergeben.

Auch, wenn Sie die Dateiinhalte mit sed ändern möchten, müssen Sie -i, damit die Änderungen verwenden, werden ausgeführt ‚in place‘.

Sie konnten dieses versuchen:

for file in *.SVG 
do 
    sed -i '$ s/.$//' $file 
done 

Oder:

find . -name "*.SVG" -exec sed -i '$ s/.$//' {} \; 
+0

Alvaro Wie kann ich den Befehl nur ausführen, wenn das letzte Zeichen^@ ist? – Andrew

+0

Typ bis zu der Zeit vor dem zweiten $, nach dem Periode Typ ctrl-v ctrl-m (ohne Leerzeichen dazwischen) dann mit dem $ weiterhin der Eingabe eines ... dies soll das dos Line-End als letztes Zeichen der Zeile entspricht –

+0

So wäre es: finden. -name "* .SVG" -exec sed -i '$ s /.^v^m $ //' {} \; Ich habe dies in bash versucht und es einfach ein^M an die Stelle gesetzt (.^M $). Aber das DOS-Ende des Dateicharakters ist das^@. Wie bekomme ich das^@? Ich habe versucht^v^@ aber nichts ist passiert. – Andrew

Verwandte Themen