Quando você executa sed sem -E , a expressão é uma expressão regular básica e os grupos de captura devem ser gravados como \(...\) . Quando você usa -E para ativar expressões regulares estendidas, os grupos de captura são gravados (...) .
O \ dentro de [...] é literal, portanto, sua expressão também evitaria a inclusão de aspas duplas nas linhas que terminam em \ . Algumas das outras fugas também são desnecessárias.
Portanto, você pode escrever seu comando sed como
sed 's/\([^"]\)$/"/'
ou como
sed -E 's/([^"])$/"/'
Ou usando & :
sed 's/[^"]$/&"/'
O & na parte de substituição da expressão será substituído pela parte da entrada que correspondeu à expressão regular.
Algumas outras alternativas que não usam um grupo de captura:
sed '/[^"]$/ s/$/"/'
Isso aplica s/$/"/ a todas as linhas que correspondem a /[^"]$/ .
Ou, alternativamente,
sed '/"$/ !s/$/"/'
Isso aplica s/$/"/ a todas as linhas que não correspondem a /"$/ (há uma pequena diferença em relação às outras abordagens aqui, pois também adiciona " às linhas vazias).
Observe que, em todos os casos, o sinal g no final é definitivamente desnecessário.