如何在带有SED或AWK的行中添加双引号?

时间:2012-05-25 12:45:12

标签: sed awk

我有一个单词列表

name,id,3

我需要像这样双引号

"name,id,3"

我试过sed的/.*/\"& amp; \“/ g',得到了

"name,id,3

只有一个双引号

我也尝试了awk {print“\”“$ 1”\“”},结果完全相同 需要帮助

6 个答案:

答案 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