Outra abordagem:
$ sed 's/"\([^"]*blah[^"]*"\)/"N/g' test.txt
"N1blah8","na","N8blah4"
"N2blah5","na","N10blah4"
"N5blah5","na","1blah234
A regex está procurando por "
, em seguida, 0 ou mais caracteres não- "
seguidos por blah
e, em seguida, 0 ou mais não "
novamente. Por causa dos parênteses, isso é capturado e pode mais tarde ser chamado de . Portanto, o comando substituirá o padrão correspondente por si mesmo (
), mas com
"N
anexado. É por isso que o primeiro "
está fora dos parênteses. O modificador /g
no final faz com que ele subsstitua todas as cadeias correspondentes em cada linha.
Se a sua versão sed
oferecer suporte, você poderá simplificá-la para:
sed -E 's/"([^"]*blah[^"]*")/"N/g'