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
: doKEYWORD
apenas se essa linha corresponder as/foo/bar/g
. -
foo
: substitua todas as ocorrências debar
na 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% .