前几天我询问如何用引号将 csv 文件第一行的值括起来。我得到了这个回复,效果很好。
$ cat file.csv
word1,word2,word3,word4,word5
12345,12346,12347,12348,12349
仅在第一行中的项目周围加上引号:
$ sed '1 { s/^/"/; s/,/","/g; s/$/"/ }' file.csv
"word1","word2","word3","word4","word5"
12345,12346,12347,12348,12349
我现在需要测试值周围是否存在引号,以消除双引号值的可能性。
最佳答案
更改每个替换以包括可选引号:
sed -E '1 { s/^"?/"/; s/"?,"?/","/g; s/"?$/"/ }' file.csv
我添加了 -E
以启用扩展模式,因此 ?
被理解为“0 或 1 匹配”。
您还可以继续使用基本模式(无 -E
)并将每个 ?
替换为 \{0,1\}
(同样,0 或 1 个匹配项)或 *
(匹配 0 个或多个)。
关于Bash 如何用引号包裹 csv 文件第一行的值(如果它们不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46287556/