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

min*_*als 19 shell awk command-line text-processing sed

我有一个单词列表

name,id,3
Run Code Online (Sandbox Code Playgroud)

我需要像这样双引号

"name,id,3"
Run Code Online (Sandbox Code Playgroud)

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

"name,id,3
Run Code Online (Sandbox Code Playgroud)

只有一个双引号

我也试过awk {print"\""$ 1"\""},结果完全相同需要帮助

0xC*_*22L 18

用它来输入你的输入:

sed 's/^/"/;s/$/"/'
Run Code Online (Sandbox Code Playgroud)

^是行开始$的锚点和行结束的锚点.用这sed条线我们分别用"和替换线的开头和线的末端".

例:

$ echo -e "name,id,2\nname,id,3\nname,id,4"|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"
Run Code Online (Sandbox Code Playgroud)

没有sed:

$ echo -e "name,id,2\nname,id,3\nname,id,4"
name,id,2
name,id,3
name,id,4
Run Code Online (Sandbox Code Playgroud)

您的文件似乎有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"
Run Code Online (Sandbox Code Playgroud)


Pau*_*ce. 13

您的输入文件在行尾有回车符.您需要dos2unix在文件上使用它们来删除它们.或者你可以这样做:

sed 's/\(.*\)\r/"\1"/g'
Run Code Online (Sandbox Code Playgroud)

这将删除回车并添加报价.


anu*_*ava 9

您可以使用awk代替sed,如下所示:

line='name,id,3'
echo $line | awk '{printf("\"%s\"\n", $0);}'
Run Code Online (Sandbox Code Playgroud)

或者更好的是使用这样的BASH printf:

printf '"%s"\n' $line
Run Code Online (Sandbox Code Playgroud)


小智 7

我发现的最简单的方法是使用双引号的十六进制代码:

 echo name,id,3 | awk '{print "\x22" $1 "\x22"}'
 "name,id,3"
Run Code Online (Sandbox Code Playgroud)