GNU/Linux >> Linux の 問題 >  >> Linux

Sedを使用して、一致する文字列のN番目の位置に文字を追加しますか?

一致する文字列のn番目(この場合は2番目)に文字を追加する必要があります。
たとえば、ファイルtext.txt 文字列の前と"の後にNを追加したい blahを含む文字列のみ

text.txt:

"1blah8","na","8blah4"  
"2blah5","na","10blah4"  
"5blah5","na","1blah234"  

text2.txtを取得したい:

"Ν1blah8","na","Ν8blah4"  
"Ν2blah5","na","Ν10blah4"  
"Ν5blah5","na","Ν1blah234"  

sed 's/.*blah.*/N&/' text.txt > text2.txtを試しました
しかし、Nを取得します "の前 そして、各行の最初に見つかった文字列でのみ。

承認された回答:

別のアプローチ:

$ sed 's/"([^"]*blah[^"]*")/"N1/g' test.txt 
"N1blah8","na","N8blah4"  
"N2blah5","na","N10blah4"  
"N5blah5","na","1blah234

正規表現は"を探しています 、次に0個以上の"以外 文字の後にblahが続く 、次に0個以上の"以外 また。括弧があるため、これはキャプチャされます 後で1と呼ぶことができます 。したがって、コマンドは一致したパターンをそれ自体に置き換えます(1 )ただし、"N 添付。そのため、最初の" 括弧の外にあります。 /g 最後に修飾子を付けると、各行の一致するすべての文字列が置き換えられます。

sedの場合 バージョンはそれをサポートしています、あなたはそれを単純化することができます:

sed -E 's/"([^"]*blah[^"]*")/"N1/g'

Linux
  1. bashのフォルダ内の各ファイルの先頭に文字列を追加するにはどうすればよいですか?

  2. 一致するテキストを見つけて次の行を置き換える

  3. sed で \r 文字を削除する方法

  1. LinuxでWCコマンドを使用して文字、バイト、改行、単語数を出力する方法

  2. SedでBash文字列変数への参照を使用しますか?

  3. 文字列に改行を追加、クロスプラットフォーム

  1. ファイル内の文字列を置き換える方法は?

  2. Sedを使用して複数行の文字列を置き換える方法は?

  3. Sedを使用して文字列の最初の文字をラップしますか?