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.
Your input file has carriage returns at the end of the lines. You need to use dos2unix
on the file to remove them. Or you can do this:
sed 's/\(.*\)\r/"\1"/g'
which will remove the carriage return and add the quotes.
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"
You can use awk instead of sed like this:
line='name,id,3'
echo $line | awk '{printf("\"%s\"\n", $0);}'
OR even better is to use BASH printf like this:
printf '"%s"\n' $line
Simplest way I've found is to use the HEX codes for double quotes:
echo name,id,3 | awk '{print "\x22" $1 "\x22"}'
"name,id,3"
Similar to @Dennis solution,
Use
sed 's/\(.*\)/"\1"/g'
No need to look for '\r', This will apply double quote for all strings. This does not require run dos2unix on the input file.
来源:https://stackoverflow.com/questions/10754682/how-to-add-double-quotes-to-a-line-with-sed-or-awk