Potřebuji přidat znak na n'-tou pozici (v tomto případě na 2.) odpovídajícího řetězce.
Například v souboru text.txt
Chtěl bych přidat N před řetězec a za "
pouze v řetězcích, které obsahují blah
text.txt:
"1blah8","na","8blah4"
"2blah5","na","10blah4"
"5blah5","na","1blah234"
Chci získat text2.txt:
"Ν1blah8","na","Ν8blah4"
"Ν2blah5","na","Ν10blah4"
"Ν5blah5","na","Ν1blah234"
Zkoušel jsem sed 's/.*blah.*/N&/' text.txt > text2.txt
ale dostávám N
před "
a pouze v prvním nalezeném řetězci každého řádku.
Přijatá odpověď:
Jiný přístup:
$ sed 's/"([^"]*blah[^"]*")/"N1/g' test.txt
"N1blah8","na","N8blah4"
"N2blah5","na","N10blah4"
"N5blah5","na","1blah234
Regulární výraz hledá "
, pak 0 nebo více non-"
znaky následované blah
a poté 0 nebo více non-"
znovu. Kvůli závorkám je to zachyceno a později může být označován jako 1
. Proto příkaz nahradí odpovídající vzor sám sebou (1
), ale s "N
připojeno. To je důvod, proč první "
je mimo závorku. /g
modifikátor na konci umožňuje nahradit všechny odpovídající řetězce v každém řádku.
Pokud váš sed
verze to podporuje, můžete to zjednodušit na:
sed -E 's/"([^"]*blah[^"]*")/"N1/g'