Für den Fall, dass Sie auf einem * sind nix-system haben Zugang zu sed
und es kann eine oder mehrere unerwünschte Kommas nur in einer spezifischer Bereich Ihrer CSV-Datei, können Sie den folgenden Einzeiler verwenden, um sie in "
als RFC4180 Abschnitt 2 schlägt vor:
sed -r 's/([^,]*,[^,]*,[^,]*,)(.*)(,.*,.*)/\1"\2"\3/' inputfile
Je nachdem, in welchem Feld die unerwünschten Kommata stehen, müssen Sie die Erfassungsgruppen der Regex (und die Ersetzung) ändern/erweitern.
Im obigen Beispiel wird das vierte Feld (von insgesamt sechs) in Anführungszeichen gesetzt.
In Kombination mit dem --in-place
-Option können Sie diese Änderungen direkt auf die Datei anwenden.
Um die richtige Regex zu "bauen", gibt es ein einfaches Prinzip zu befolgen:
- Für jedes Feld in Ihrer CSV, das mit antes de das Feld mit dem/den unerwünschten Komma(s) schreiben Sie ein
[^,]*,
und fügen Sie sie alle in einer Erfassungsgruppe zusammen.
- Für das Feld, das das/die unerwünschte(n) Komma(s) enthält, schreiben Sie
(.*)
.
- Für jedes Feld nach das Feld mit dem/den unerwünschten Komma(s) schreiben Sie ein
,.*
und fügen Sie sie alle in einer Erfassungsgruppe zusammen.
Hier ist ein kurzer Überblick über die verschiedenen möglichen Regexe/Substitutionen je nach dem spezifischen Feld. Wenn nicht angegeben, ist die Ersetzung \1"\2"\3
.
([^,]*)(,.*) #first field, regex
"\1"\2 #first field, substitution
(.*,)([^,]*) #last field, regex
\1"\2" #last field, substitution
([^,]*,)(.*)(,.*,.*,.*) #second field (out of five fields)
([^,]*,[^,]*,)(.*)(,.*) #third field (out of four fields)
([^,]*,[^,]*,[^,]*,)(.*)(,.*,.*) #fourth field (out of six fields)
Wenn Sie das/die unerwünschte(n) Komma(s) entfernen möchten mit sed
anstatt sie in Anführungszeichen zu setzen, verweisen Sie auf diese Antwort .