A sua segunda cotação não é correspondida porque a correspondência seria space quote e
e a space
já é consumida pela d quote space
precedente.
Este é um exemplo de livros didáticos para correspondência de referência , que corresponde, mas não consome. Infelizmente, a correspondência de referência não está implementada em sed
. Se eu tivesse que usar sed
para isso, eu primeiro substituiria as aspas válidas por algum caractere não-ocorrente, depois dobraria todas as citações restantes e então colocaria as aspas válidas de volta.
Perl tem correspondência de pareamento, o que é (um pouco) mais fácil para os olhos:
$ echo 'abc;d" "e"f;"ijk"' | perl -pe 's/(?<!;)"(?![;\n])/""/'g
abc;d"" ""e""f;"ijk"
Tradução: uma cotação não precedida pela regex ;
, não seguida pela regex [;\n]
.
O \ n existe porque o perl considera parte da linha e, portanto, corresponde à última citação, a menos que seja proibida.