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

主宰稳场 提交于 2019-11-29 17:08:02

问题


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.


回答1:


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.




回答2:


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"



回答3:


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



回答4:


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"



回答5:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!