Wie lösche ich eine Reihe von nachgestellten Kommas in bash:
a,b,c,d,,,,
1,2,3,,,,
Gewünschte Ausgabe:
a,b,c,d
1,2,3
Versucht dies zu tun:
grep "5628" test.csv | sed 's/,*$//g'
aber es funktioniert nicht. Die Datei stammte ursprünglich von einem Windows-Computer.
sed
Sie ohne Dateinamen angezeigt haben, fungiert als Filter und verarbeitet keine Datei an Ort und Stelle )dos2unix
oder ähnlichem zu konvertieren .Antworten:
Bezüglich des von Ihnen angegebenen Befehls:
Dadurch werden Zeilen ausgegeben, die mit '5628' übereinstimmen, wobei alle nachgestellten Kommas entfernt werden. Die Datei wird nicht aktualisiert
test.csv
.Sie haben jedoch angegeben, dass die Datei von einem Windows-Computer stammt, sodass die Zeilenenden CR / NL statt nur NL sind. Das Ergebnis ist, dass sich am Ende der Zeile eine versteckte CR befindet und Sie stattdessen eine Befehlszeile benötigen:
Eigentlich können Sie dies einfach zu einem Befehl machen:
quelle
\r*
ermöglicht null oder mehr CR-Zeichen (daher funktioniert es weiterhin mit von Unix / Linux abgeleiteten Dateien). Ich würde es vorziehen,\r?
eine einzelne optionale CR anzugeben, aber ich konnte mich nicht an die Flagge erinnernsed
, um sie anzuweisen, EREs über meinem Kopf zu verwenden. Ich denke es ist hier-r
aber ungetestet. Das,*
gehört dir und entspricht null oder mehr Kommas.g
wird in diesem Fall nicht benötigt, ter ist nur 1 Ende angegeben durch$
(nicht das OP, das nur nach dem Entfernen des nachlaufenden Komas fragt) Dies vermeidet einen Rohrleitungsprozess, bei dem der Filter und die Umwandlung direkt übernommen werden
quelle