一致する文字列の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'