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)
这将删除回车并添加报价.
您可以使用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)