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.