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.