A complicação aqui é que, se você substituir todos os ' por " e, em seguida, todos os " por ' , você terá apenas ' . Então, primeiro você precisará substituir ' por outra coisa - por exemplo, o caractere NULL ( ), que você pode seguramente assumir, não estará em seu arquivo de entrada - então "' with " e substitua essa outra coisa por -pe novamente. Por exemplo, em perl:
$ perl -pe "if(/KEYWORD){s/'/perl -pe "tr/'\"/\"'/ if /^KEYWORD/" file
/g; s/\"/'/g; s/$ perl -pe "if(/KEYWORD){s/'/perl -pe "tr/'\"/\"'/ if /^KEYWORD/" file
/g; s/\"/'/g; s/%pre%/\"/g}" file
KEYWORD_1 table name column = 'string' AND column = 'string'
Additional text
.
.
.
KEYWORD_2 text "text in quote" etc.
/\"/g}" file
KEYWORD_1 table name column = 'string' AND column = 'string'
Additional text
.
.
.
KEYWORD_2 text "text in quote" etc.
Explicação
-
-e: p digite cada linha de entrada depois de aplicar o script fornecido porif(/KEYWORD/){something}. -
something: doKEYWORDapenas se essa linha corresponder as/foo/bar/g. -
foo: substitua todas as ocorrências debarna linha porg. O\"significa "global". Sem isso, apenas a primeira ocorrência em cada linha seria substituída.
Observe que, como o próprio script está entre aspas duplas, as aspas duplas dentro do script precisam ser escapadas ( tr ).
Como apontado nos comentários, há uma maneira mais direta que eu deveria ter pensado em primeiro lugar:
%pre% O operador tr/searchlist/replacementlist/ traduz as listas de caracteres. O formato geral é ' . Portanto, isso substituirá todos os " por " e todos os ' por KEYWORD apenas nas linhas correspondentes a %code% .