我有一个单词列表
name,id,3
我需要像这样双引号
"name,id,3"
我试过sed的/.*/\"& amp; \“/ g',得到了
"name,id,3
只有一个双引号
我也尝试了awk {print“\”“$ 1”\“”},结果完全相同 需要帮助
答案 0 :(得分:16)
使用此命令将输入传输到:
sed 's/^/"/;s/$/"/'
^
是行开始的锚点,$
是行结束的锚点。使用sed
行,我们将分别用"
和"
替换行开头和行结尾。
示例:
$ echo -e "name,id,2\nname,id,3\nname,id,4"|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"
没有sed
:
$ echo -e "name,id,2\nname,id,3\nname,id,4"
name,id,2
name,id,3
name,id,4
您的文件似乎有DOS行结尾。首先通过 证明:dos2unix
$ 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"
答案 1 :(得分:10)
您的输入文件在行尾有回车符。您需要在文件上使用dos2unix
来删除它们。或者你可以这样做:
sed 's/\(.*\)\r/"\1"/g'
将删除回车并添加引号。
答案 2 :(得分:8)
您可以使用awk代替sed:
line='name,id,3'
echo $line | awk '{printf("\"%s\"\n", $0);}'
或者更好的是使用这样的BASH printf:
printf '"%s"\n' $line
答案 3 :(得分:3)
我发现最简单的方法是使用HEX代码作双引号:
echo name,id,3 | awk '{print "\x22" $1 "\x22"}'
"name,id,3"
答案 4 :(得分:2)
与@Dennis解决方案类似,
使用
sed 's/\(.*\)/"\1"/g'
无需查找' \ r',这将对所有字符串应用双引号。 这不需要在输入文件上运行dos2unix。
答案 5 :(得分:0)
在使用sed命令之前,您可以使用\作为转义符,然后它将在您的字符串中打印“。例如,我使用以下命令将类似的字符串放置到文本文件的第一行:
var = "\"name,id,3\""
sed -i '1i' "$var" /tmp/out.txt