Mit Linux Konsole Absatz 0A in Dateien suchen und ersetzen
Moin,
jedes mal das gleiche. Ein mal im Jahr brauche ich einen Script und jedes mal stoße ich auf neue Probleme mit alten Wurzeln.
Die Absätze…..
Mit Linux am ende einer Datei eine Leerzeile einfügen
Ich habe eine Datei. Mit Adressen. Dummerweise gab es mal einen Entwickler Team welches ein PayPal Modul entwickelte, bei dem die Adresse bei einem Zusatz (also zweitem Feld für Straße) die beiden Felder Trennt nur 1 und zwar laut dem Hexeditor ein Absatz „0A“ Alle anderen werden ganz normal und vorbildlich mit „0D 0A“ umgesetzt.

Nun muss ich für meinen anderen Script die Datei vorbereiten und diesen Zeilenumbruch entfernen und mit zum Beispiel einem Leerzeichen oder Pipe ( | ) ersetzen.
Ich kann jedoch diesen Absatz in der Konsole weder finden, noch ersetzen.
HEX:
Folgendes habe ich bis her probiert:
Habt Ihr eine Idee für mein Problem?
Sonnst sonniges Wochenende euch noch.
Ich
jedes mal das gleiche. Ein mal im Jahr brauche ich einen Script und jedes mal stoße ich auf neue Probleme mit alten Wurzeln.
Die Absätze…..
Mit Linux am ende einer Datei eine Leerzeile einfügen
Ich habe eine Datei. Mit Adressen. Dummerweise gab es mal einen Entwickler Team welches ein PayPal Modul entwickelte, bei dem die Adresse bei einem Zusatz (also zweitem Feld für Straße) die beiden Felder Trennt nur 1 und zwar laut dem Hexeditor ein Absatz „0A“ Alle anderen werden ganz normal und vorbildlich mit „0D 0A“ umgesetzt.

Nun muss ich für meinen anderen Script die Datei vorbereiten und diesen Zeilenumbruch entfernen und mit zum Beispiel einem Leerzeichen oder Pipe ( | ) ersetzen.
Ich kann jedoch diesen Absatz in der Konsole weder finden, noch ersetzen.
HEX:
46 69 72 6D 61 31 3B 4E 61 6D 65 31 3B 4E 61 6D 65 32 3B 53 74 72 61 DF 65 31 3B 53 74 72 61 DF 65 32 3B 50 4C 5A 3B 4F 72 74 3B 52 45 2D 4E 75 6D 6D 65 72 3B 54 65 6C 4E 75 6D 6D 65 72 3B 65 72 76 69 63 65 3B 4B 6F 6D 6D 65 6E 74 61 72 3B 4C 61 65 6E 64 3B 42 65 73 74 65 6C 6C 6E 72 0D 0A 46 69 72 6D 61 3B 4D 2E 20 4D 75 73 74 65 72 6E 61 6D 65 3B 3B 41 6D 20 55 66 65 72 6C 61 6E 64 20 31 32 33 2C 20 47 65 62 2E 20 41 34 0A 5A 75 73 61 74 7A 6B 6F 6D 6D 65 6E 74 61 72 3B 3B 31 32 33 34 35 3B 4D FC 6E 63 68 65 6E 3B 42 4C 41 42 4C 41 3B 3B 3B 3B 44 45 3B 42 6C 75 70 42 6C 75 70 0D 0A 46 69 72 6D 61 32 3B 4B 75 6E 64 65 3B 3B 53 74 72 61 73 73 65 20 31 32 30 3B 3B 32 33 39 36 36 3B 4B 6F 65 6C 6E 3B 41 4C 42 41 4C 42 3B 30 30 30 30 30 30 30 30 30 30 30 3B 3B 3B 44 45 3B 50 6C 75 62 50 6C 75 62 0D 0A
Folgendes habe ich bis her probiert:
sed "s/\r/123456789/g" 2019-05-08_09-00-25.csv
find 2019-05-08_09-00-25.csv -type f -print0 | xargs -0 grep -e "\r"
Habt Ihr eine Idee für mein Problem?
Sonnst sonniges Wochenende euch noch.
Ich
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 455476
Url: https://administrator.de/forum/mit-linux-konsole-absatz-0a-in-dateien-suchen-und-ersetzen-455476.html
Ausgedruckt am: 03.04.2025 um 02:04 Uhr
7 Kommentare
Neuester Kommentar
Servus,
Das zu ersetzen ist aber kein Problem und lässt sich bspw. mit sed erledigen:
Zur Erläuterung der sed Parameter:
Bei solchen Operationen, also den hin und her übertragen zwischen Linux und Windows sollte man bei der Übertragung und dem Handling in Texteditoren höllisch aufpassen, dass dieser nicht automatische Ersetzungen der Zeilenumbrüche ungefragt vornimmt. Außerdem sollte man mit Datentransfer-Tools aufpassen und den Binary-Modus statt dem Texttransfer-Modus verwenden da ansonsten Zeilenumbrüche auch automatisch angepasst werden können.
Das kann nämlich alles zu allgemeiner Verunsicherung führen.
Grüße Uwe
die beiden Felder Trennt nur 1 und zwar laut dem Hexeditor ein Absatz „0A“ Alle anderen werden ganz normal und vorbildlich mit „0D 0A“ umgesetzt.
Das eine ist ein ganz normaler LF (0A) wie er unter Linux üblich ist, das andere ist das CRLF (0D0A) das unter Windows/DOS den Zeilenumbruch darstellt. Es gibt hier also kein "unnormal" da hat nur einer Unix und DOS Zeilenumbrüche gemixt.Das zu ersetzen ist aber kein Problem und lässt sich bspw. mit sed erledigen:
sed -Ee ':a;N;$!ba;s/([^\r])\n/\1 /g' "2019-05-08_09-00-25.csv" >new.csv
- :a definiert einen Label
- N Aktuelle und nächste Zeile in den Pattern-Space laden
- $!ba springe solange zu Label :a bis das Ende der Datei erreicht ist
- Es befindet sich nun der ganze Text der Datei im Pattern-Space und auf diesen wird die folgende Replace-Aktion angewendet:
- s/([^\r])\n/\1 /g : Ersetzt alle Unix-Zeilenumbrüche (0A) mit einem Leerzeichen "ohne dabei das 0A in den vorhandenen DOS-Zeilenumbrüchen(0D0A) zu ersetzen".
Bei solchen Operationen, also den hin und her übertragen zwischen Linux und Windows sollte man bei der Übertragung und dem Handling in Texteditoren höllisch aufpassen, dass dieser nicht automatische Ersetzungen der Zeilenumbrüche ungefragt vornimmt. Außerdem sollte man mit Datentransfer-Tools aufpassen und den Binary-Modus statt dem Texttransfer-Modus verwenden da ansonsten Zeilenumbrüche auch automatisch angepasst werden können.
Das kann nämlich alles zu allgemeiner Verunsicherung führen.
Grüße Uwe
Zitat von @OIOOIOOIOIIOOOIIOIIOIOOO:
Moin Uwe,
danke dir viel mals für die ausführliche Erklärung. Nach dem ich in deinem Code das $! vor dem ba hinzugefügt habe, hat es auch funktioniert.
Uups, da habe ich wohl aus versehen ein Cut zum Erklärtext statt einem Copy gemacht Moin Uwe,
danke dir viel mals für die ausführliche Erklärung. Nach dem ich in deinem Code das $! vor dem ba hinzugefügt habe, hat es auch funktioniert.
Extended Regular Expressions
http://www.gnu.org/software/sed/manual/sed.html#Command_002dLine-Option ...
sed --help
oder man sed
verrät es dir übrigens auch genauso wie die manpagehttp://www.gnu.org/software/sed/manual/sed.html#Command_002dLine-Option ...