Ich muss ein Zeichen an der n-ten Position (in diesem Fall an der 2.) einer übereinstimmenden Zeichenfolge hinzufügen.
Zum Beispiel in einer Datei text.txt Ich möchte ein N vor der Zeichenfolge und nach dem " hinzufügen nur in den Strings, die blah enthalten
text.txt:
"1blah8","na","8blah4"
"2blah5","na","10blah4"
"5blah5","na","1blah234"
Ich möchte eine text2.txt erhalten:
"Ν1blah8","na","Ν8blah4"
"Ν2blah5","na","Ν10blah4"
"Ν5blah5","na","Ν1blah234"
Ich habe versucht sed 's/.*blah.*/N&/' text.txt > text2.txt
aber ich bekomme den N vor dem " und nur im ersten gefundenen String jeder Zeile.
Akzeptierte Antwort:
Ein anderer Ansatz:
$ sed 's/"([^"]*blah[^"]*")/"N1/g' test.txt
"N1blah8","na","N8blah4"
"N2blah5","na","N10blah4"
"N5blah5","na","1blah234
Die Regex sucht nach einem " , dann 0 oder mehr Nicht-" Zeichen gefolgt von einem blah , und dann 0 oder mehr Nicht-" wieder. Aufgrund der Klammern wird dies erfasst und kann später als 1 bezeichnet werden . Daher ersetzt der Befehl das übereinstimmende Muster durch sich selbst (1 ), aber mit einem "N angehängt. Deshalb der erste " steht außerhalb der Klammern. Der /g Modifikator am Ende bewirkt, dass alle übereinstimmenden Zeichenfolgen in jeder Zeile ersetzt werden.
Wenn Ihr sed Version unterstützt, können Sie es vereinfachen zu:
sed -E 's/"([^"]*blah[^"]*")/"N1/g'