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'