How to add double quotes to a line with SED or AWK?

minerals picture minerals · May 25, 2012 · Viewed 53.8k times · Source

I have the following list of words:

name,id,3

I need to have it double quoted like this:

"name,id,3"

I have tried sed 's/.*/\"&\"/g' and got:

"name,id,3

Which has only one double quote and is missing the closing double quote.

I've also tried awk {print "\""$1"\""} with exactly the same result. I need help.

Answer

0xC0000022L picture 0xC0000022L · May 25, 2012

Use this to pipe your input into:

sed 's/^/"/;s/$/"/'

^ is the anchor for line start and $ the anchor for line end. With the sed line we're replacing the line start and the line end with " and " respectively.

Example:

$ echo -e "name,id,2\nname,id,3\nname,id,4"|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"

without the sed:

$ echo -e "name,id,2\nname,id,3\nname,id,4"
name,id,2
name,id,3
name,id,4

Your file seems to have DOS line endings. Pipe it through dos2unix first.

Proof:

$ cat test.txt
name,id,2
name,id,3
name,id,4
$ sed 's/^/"/;s/$/"/' test.txt
"name,id,2
"name,id,3
"name,id,4
$ cat test.txt|dos2unix|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"