Ich möchte ein Muster mit sed entfernen, nur bei zweitem Vorkommen. Hier ist, was ich will, entfernen Sie ein Muster, aber beim zweiten Auftreten.Sed ersetzen bei zweitem Vorkommen
Was im file.csv ist:
a,Name(null)abc.csv,c,d,Name(null)abc.csv,f
a,Name(null)acb.csv,c,d,Name(null)acb.csv,f
a,Name(null)cba.csv,c,d,Name(null)cba.csv,f
Ausgang gesucht:
a,Name(null)abc.csv,c,d,Name,f
a,Name(null)acb.csv,c,d,Name,f
a,Name(null)cba.csv,c,d,Name,f
Das ist, was ich versuchte:
sed -r 's/(\(null)\).*csv//' file.csv
Das Problem hierbei ist, dass der Regex auch ist gierig, aber ich kann nicht aufhören. Ich habe auch versucht diese, das erste Vorkommen von „null“ zu überspringen:
sed -r '0,/null/! s/(\(null)\).*csv//' file.csv
auch versucht, aber die gierigen regex ist nach wie vor das Problem.
sed -r 's/(\(null)\).*csv//2' file.csv
Ich habe gelesen, dass ?
kann die Regex „faul“ machen, aber ich kann es nicht Training machen.
sed -r 's/(\(null)\).*?csv//' file.csv
Wenn Sie 3 oder mehr '(null) 's haben und immer noch nur das 2. Vorkommen entfernen wollen, dann t hink es wäre einfacher mit Perl zu arbeiten, mit '. *?' statt '. *'. –