![](/img/trans.png)
[英]How to convert CSV with Double Quotes into OpenCSV using SED or AWK?
[英]How to add double quotes to a line with SED or AWK?
我有以下單詞列表:
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
我發現的最簡單的方法是使用雙引號的十六進制代碼:
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.