Hallo Leute,
ich versuche mit sed ein tab durch ein Semmikolon zu ersetzen.
Das habe ich schon versucht
sed -i "s/space]\+/ /g"
oder
sed -e 's/\t/\n/g'
|
Anmeldungsdatum: Beiträge: 102 |
Hallo Leute, ich versuche mit sed ein tab durch ein Semmikolon zu ersetzen. Das habe ich schon versucht sed -i "s/space]\+/ /g" oder sed -e 's/\t/\n/g' |
||||||
|
Anmeldungsdatum: Beiträge: 4453 |
Mal angenommen, deine Datei heisst test.txt. Dann kannst Du in der Datei die Ersetzung so vornehmen: sed -i 's/\t/\;/g' test.txt Zum Testen kannst Du ja einfach das -i weg lassen, dann wird die Datei nicht verändert. |
||||||
|
Ehemalige
Anmeldungsdatum: Beiträge: 5584 |
Oder mit einfacherer Syntax: tr '\t' ';' |
||||||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 102 |
Danke damit funktioniert es schon besser. Ich habe eine Spalte bei der ein langer Text drin ist und die macht vermutlich ärger. Kann ich mit sed auch eine Spalte ausschließen? Bzw. sind in der Spalte auch ";" im Text drin. Kann man das auch noch ausschließen? |
||||||
|
Ehemalige
Anmeldungsdatum: Beiträge: 5584 |
|||||||
|
Projektleitung
Anmeldungsdatum: Beiträge: 13242 |
|
||||||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 102 |
Ja das merk ich irgendwie auch, habe schon gefühlt 100 sed Befehle versucht......mit Windows Editor funktioniert das aber einwandfrei. |
||||||
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 102 |
ok und wie geht das? |
||||||
|
Projektleitung
Anmeldungsdatum: Beiträge: 13242 |
Die Funktion heißen |
||||||
|
Anmeldungsdatum: Beiträge: 11278 |
Oder mit Python3 und einem dedizierten CSV-Parser:
Das würde dann aus echo -e $(cat <<EOF foo\tbar\tbaz\tspam;ham\tblah\nEggs and Spam\tEggs; Sausages and Spam\tblah\tfahsel EOF ) > test.csv sowas machen: $ ./csv_changer.py test.csv foo;bar;baz;"spam;ham";blah Eggs and Spam;"sausages; eggs and spam";wutz;sploink bzw. mit der Zeile 20 im Skript einkommentiert: $ python csv_changer.py test.csv foo;bar;baz;spam_ham;blah Eggs and Spam;Eggs_ Sausages and Spam;blah;fahsel |
||||||
|
Anmeldungsdatum: Beiträge: 17630 |
Ja, und wenn man testet stellt man fest, dass das Semikolon keiner Maskierung bedarf: sed -i 's/\t/;/g' test.txt
Nur kannst Du damit nicht ohne zusätzlicher Gymnastik die Quelldatei überschreiben.
Wie lange? Was soll das ausmachen, Du wandelst Tabs in Semikolons. Wenn vorher schon Semikolons existieren juckt das nicht.
Vermutlich nicht.
Du kannst vorab Semikolons maskieren, wenn das Dein Begehr ist: sed -i 's/;/\\;/g; s/\t/;/g' test.txt Keine Ahnung ob Dir das weiterhilft.
Wenn die von der Qualität
waren, bist Du mit 100 noch billig weggekommen. Die eckige Klammer wurde nie geöffnet. Die Ersetzung enthält kein Semikolon sondern wieder einen Spacecharacter, es werden doppelte eckige Klammern benötigt und zusätzlich ein Paar Doppelpunkte, das man mit Glück an der richtigen Stelle platziert:
Mit
kann man nachschlagen, oder man -a regex. |
||||||
|
Wikiteam
Anmeldungsdatum: Beiträge: 1575 |
Das ist ein wahres Wort!
Siehe bitte auch grep (Abschnitt „Listen-bracket-expressions“). |