How to replace quotation marks in a file with sed?

Two tips:

  1. You can't escape a single quote within a string quoted with single quotes. So you have to close the quote, add an escaped quote, then open the quotes again. That is: 'foo'\''bar', which breaks down as:

    • 'foo'        quoted foo
    • \'             escaped '
    • 'bar'        quoted bar

    yielding foo'bar.

  2. (optional) You don't necessarily have to use / in sed. I find that using / and \ in the same sed expression makes it difficult to read.

For example, to remove the quotes from this file:

$ cat /tmp/f
aaa"bbb"'ccc'aaa

Given my two tips above, the command you can use to remove both double and single quotes is:

$ sed -e 's|["'\'']||g'  /tmp/f

Based on my first tip, the shell reduces sed's second argument (i.e., the string after the -e) to s|["']||g and passes that string to sed. Based on my second tip, sed treats this the same as s/['"]//g. It means

remove all characters matching either ' or "   (i.e., replace them with nothing)

You probably need something more complex than this to do what you want, but it's a start.

Tags:

Sed