我有以下单词列表:
name,id,3
我需要像这样双引号:
"name,id,3"
我已经尝试sed 's/.*/\"&\"/g'
并得到:
"name,id,3
其中只有一个双引号,并且缺少结束双引号。
我也尝试awk {print "\""$1"\""}
过完全相同的结果。我需要帮助。
我有以下单词列表:
name,id,3
我需要像这样双引号:
"name,id,3"
我已经尝试sed 's/.*/\"&\"/g'
并得到:
"name,id,3
其中只有一个双引号,并且缺少结束双引号。
我也尝试awk {print "\""$1"\""}
过完全相同的结果。我需要帮助。
使用它将您的输入传输到:
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"
您的输入文件在行尾有回车符。您需要dos2unix
在文件上使用来删除它们。或者你可以这样做:
sed 's/\(.*\)\r/"\1"/g'
这将删除回车并添加引号。
您可以像这样使用 awk 而不是 sed:
line='name,id,3'
echo $line | awk '{printf("\"%s\"\n", $0);}'
或者更好的是像这样使用 BASH printf:
printf '"%s"\n' $line
我发现最简单的方法是使用 HEX 代码作为双引号:
echo name,id,3 | awk '{print "\x22" $1 "\x22"}'
"name,id,3"
类似于@Dennis 解决方案,
利用
sed 's/\(.*\)/"\1"/g'
无需查找'\r',这将对所有字符串应用双引号。这不需要在输入文件上运行 dos2unix。
在使用 sed 命令之前,您可以使用 \ 作为转义字符,然后它将在您的字符串中打印 "。例如,我使用以下命令将类似的字符串放在文本文件的第一行:
var = "\"name,id,3\""
sed -i '1i' "$var" /tmp/out.txt
这对我有用:
echo name,id,3 | sed 's/name,id,3/"name,id,3"/'
"name,id,3"