Frage
habe ich eine Datei aus Windows erzeugt, dass ich in ein Skript unter Linux einzufügen habe. Mein Skript funktioniert gut, mit Ausnahme der Tatsache, dass am Ende jeder Zeile habe ich ein ^ M Zeichen.
Wie kann ich es mit bash entfernen?
Zur Zeit mein Skript ist:
#/bin/bash
IFS=$'\n'
for CUSTOMER in `cat exp.csv`
do
echo $CUSTOMER
done
Lösung
dos2unix auf exp.csv
vor der weiteren Verarbeitung.
Andere Tipps
^ M sollten Fenster Newline sein \ r, daher können Sie einfach alle entfernen müssen \ r Sie können dies erreichen, die tr-Tool, das Sie von Ihrem Bash-Skript aufrufen, das vom Wikipedia-Artikel ist (ich es nicht bestätigen):
tr -d '\r' < inputfile > outputfile
Daher ist aus bash sollte es so etwas wie
seinVAR=`echo -n $CUSTOMER | tr -d '\r'`
Ich tue dies viel mit tr
. Das CR-Zeichen ist 013 in Oktal:
tr -d '\013' < $FILE
So in der Schleife, das wäre nur
for CUSTOMER in `tr -d '\013' < exp.csv`
dos2unix Befehl ont er Datei
Es gibt mehr Möglichkeiten, schlechten char M
aus der Datei zu entfernen
- verwenden Sie den Befehl
dos2unix file_name
- offene Datei in Editor vi, gehen Sie zu
Befehlsmodus und Typ
:%s/ctrl+v ctrl+m//g
dies alles schlecht entfernen wird Zeichen von Ihnen Datei. verwenden jetzt:wq
für Speichern und Beenden -
sed -e "s/^M//" filename(exist file name) > newfilename(new name)
sed -e "s / ^ M //" Dateiname (exist Dateiname)> newfilename (neuer Name)
Hinweis: schlechte Zeichen auf Unix-Server Hit unter Befehl für alle Java-Dateien zu finden
find . -name "*.java*" -type f | xargs grep -l ^M *
Ebenso können Sie "*.*"
statt "*.java"
für alle Arten von Dateien verwenden