Ich habe eine CSV-Datei, in der die Daten das folgende Format haben
|001|,|abc,def|,123456,789,|aaa|,|bbb|,444,555,666
Ich möchte nur die ",", die zwischen Zahlen erscheinen, durch ein anderes Zeichen ersetzen, beispielsweise SOH oder $ oder *
andere ",", die in der Zeile erscheinen, sollten nicht ersetzt werden, d. h. um zu sagen, dass ich folgende Ausgabe haben möchte
|001|,|abc,def|,123456*789,|aaa|,|bbb|,444*555*666
Kann mir bitte jemand mit dem sed-Befehlsmuster helfen, um die oben gewünschte Ausgabe zu erhalten
Antwort1
Versuche dies
sed 's/\([0-9]\),\(-\?[0-9]\)/\1\*\2/g'
Der erste Abschnitt entspricht einer Ziffer, gefolgt von einem Komma, gefolgt von einer Ziffer oder einem -. Der nächste Abschnitt wiederholt einfach die erste Ziffer, das Ersatzzeichen und dann die letzte Ziffer.
Dadurch werden alle Muster wie „#,#“ oder „#,-#“ erkannt, auch einige, die möglicherweise nicht erwünscht sind (z. B. „abc123,-def“ --> „abc123*-def“). Um dies zu beheben, sind weitere Kenntnisse des Eingabestroms erforderlich. (Weitere Einzelheiten finden Sie in den Kommentaren.)
Antwort2
Folgendes scheint zu funktionieren:
sed 's/\([0-9]\),\([-0-9]\)/\1\*\2/g'