Eu usaria o dialeto perl de expressões regulares. Se você estiver em um sistema com sed
, provavelmente terá perl.
Dado
<KeyValue key="EMPTY_SEARCH_CRITERIA" type="String" value="CS_CODE" comment="Configured empty search criteria."/>
Perl Regex
perl -i -pe 's/(value=)".*?"/"some_replacement_string"/g' <filename>
Notas
Você pode querer testar isso primeiro, primeiro imprimindo no terminal.
perl -pe 's/(value=)".*?"/"some_replacement_string"/g' <filename>
Ou crie um backup com extensão .bak
perl -i.bak -pe 's/(value=)".*?"/"some_replacement_string"/g' <filename>
Expressão Regular Explicada:
- (): agrupar como variável \ 1
- ": as citações são literais por causa da expressão com aspas simples, portanto não há necessidade de evitá-las.
- ?: serve para domar *, o que significa que ele irá parar de devorar na primeira partida (e não continuar mastigando até a final ".
sed
não suporta operadores não-gananciosos, mas você pode usar o truque na outra resposta[^"]*"
, que significa engolir todos os caracteres que não estão "up até a". Isso efetivamente faz a mesma coisa nesse caso.