Ich muss alle Inhalte entfernen, die in einer Spalte nach einem bestimmten Zeichen in der CSV-Datei erscheinen. Dies ist das aktuelle Format:
2020-01-01T12:00:00,Transaction Description,Initiator,$00.00
Ich möchte den Inhalt der ersten Spalte, der nach T erscheint, entfernen, sodass es folgendermaßen aussieht:
2020-01-01,Transaction Description,Initiator,$00.00
Ich habe sed ausprobiert, aber es hat nicht wie erwartet funktioniert.
Antwort1
Die Verwendung von Standard sed
in ähnlicher Weise wieTimur verwendet Perl:
$ sed 's/T[^,]*//' file
2020-01-01,Transaction Description,Initiator,$00.00
Dadurch wird der gesamte Text ab der ersten T
Zeile jeder Zeile durch eine Ersetzung bis zum ersten Komma (dieses jedoch nicht eingeschlossen) entfernt.
Um das Ergebnis zu speichern, leiten Sie es zu einer neuen Datei weiter.
Antwort2
Verwenden Sie diesen Perl-Einzeiler:
perl -pe 's{T[^,]*}{}' input_file > output_file
Hier
-e
weist das Befehlszeilenflag Perl an, den in der Zeile folgenden Code zu verwenden, anstatt im angegebenen Skript nach Code zu suchen.
-p
Es weist Perl an, die Eingabe Zeile für Zeile zu durchlaufen und sie nach der Ausführung des angegebenen Codes auszudrucken.
s{T[^,]*}{}
Es ersetzt T
gefolgt von beliebigen Zeichen außer ,
null oder mehrmals ( *
gibt gierige oder längste Übereinstimmung an). Dies „frisst“ die Zeichen auf, beginnend mit dem ersten T (einschließlich) und endend mit dem ersten folgenden Komma (ausschließlich).
Antwort3
Methode 1:
awk -F "," 'OFS=","{gsub(/T.*/,"",$1);print $0}' filename
Ausgabe
2020-01-01,Transaction Description,Initiator,$00.00
Befehl2
perl -pne "s/,/\n/g" filenmame| sed '/.T/s/T.*//g'|perl -pne "s/\n/,/g"| sed "s/,$//g"
Ausgabe
2020-01-01,Transaction Description,Initiator,$00.00
Methode 3
#!/usr/bin/python
import re
p=re.compile(r'T.*')
k=open('p.txt','r')
for i in k:
l=i.split(",")
z=re.sub(p,"",l[0])
rt=",".join(l[1:])
er=",{0}".format(rt)
print z+er,
Ausgabe
2020-01-01,Transaction Description,Initiator,$00.00