Bash 如何用引号包裹 csv 文件第一行的值(如果它们不存在)

标签 bash csv if-statement quotations

前几天我询问如何用引号将 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/

相关文章:

bash,用另一个变量替换部分变量

bash - 如何阅读带有特殊字符的电子邮件

linux - 将标准输出作为命令行工具的文件名传递?

ruby - 用逗号、双引号和编码解析 csv

r - 使用R将数据转换为时间序列数据

java - 帮助打破 if/else 吗?

python - 在Python中,应该如何测试环境变量中指定的路径中是否存在文件?

mysql - 如何使用jsp和servlet将csv文件上传到mysql

php - 如果在 php 脚本中有其他条件

c++ - 我的程序中出现访问冲突(段错误)?