When you run `sed` without `-E`, then the capture groups must be written as `\(...\)`. When you use `-E` to enable extended regular expressions, capture groups are written `(...)`.

The `\` inside `[...]` is literal, so your expression would also avoid adding a double quote on lines ending with `\`. Some of the other escaping is also unnecessary.

Therefore, you may write your `sed` command as

 sed 's/\([^"]\)$/\1"/'

or as

 sed -E 's/([^"])$/\1"/'

Or, using `&`:

 sed 's/[^"]$/&"/'

A couple of other alternatives that does not use a capture group:

 sed '/[^"]$/ s/$/"/'

This applies `s/$/"/` to all lines that matches `/[^"]$/`.

Or, alternatively,

 sed '/"$/ !s/$/"/'

This applies `s/$/"/` to all lines that doesn't match `/"$/`.


Note that in all cases, the `g` flag at the end is _definitely_ not needed.