GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden Sie Sed, um ein Zeichen an der n-ten Position der übereinstimmenden Zeichenfolge hinzuzufügen?

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'

Linux
  1. Wie ersetze ich eine Zeichenfolge in einer oder mehreren Dateien?

  2. Wie verwendet man Sed, um eine mehrzeilige Zeichenfolge zu ersetzen?

  3. Verwenden einer Referenz auf eine Bash-String-Variable in Sed?

  4. Bash:Zeichenfolge ohne Zeilenumbruch am Ende der Datei hinzufügen

  5. Zeilenumbruch zur Zeichenfolge hinzufügen, plattformübergreifend

Ersetzen von Zeichenfolgen in Bash

WIE MAN DEN SCHWANZBEFEHL VERWENDET

Wie man den Head-Befehl verwendet

BENUTZUNG DES SED-EDITORS

Top 20 der zu verwendenden sed-Befehle

So verwenden Sie Sed zum Suchen und Ersetzen einer Zeichenfolge in einer Datei