我想替换 CSV 文件第一列的所有下划线。它应该对 csv 文件的其他列执行任何操作。
我只能找到这个: sed ‘s/_/./g’ 文件.txt
但我想在文本文件的第一列中用点替换所有下划线。如何将第一列传递给 sed 命令?
谢谢
答案1
Sed 没有内置的“列”概念,因此g
您不能全局替换字符(使用替换标志),而是需要在循环中一次替换一个字符,当第一个分隔符之前没有更多字符需要替换时,就从循环中退出。例如:
sed -e ':a' -e '/^[^,]*_[^,]*,/!b' -e 's/_/./;ta' file.csv
我认为使用一个能够理解的工具会更容易字段- 例如使用 Awk:
awk -F, 'BEGIN{OFS=FS} {gsub(/_/,".",$1); print}' file.csv
注意两个都如果您的 CSV 文件包含带引号的分隔符,这些功能都会中断 - 如果是这种情况,那么您将需要使用可以正确解析 CSV 的工具 - 例如带有 Text::CSV 模块的 Perl。
答案2
对于这项工作,我建议使用 awk 而不是 sed:
awk -F',' 'BEGIN {OFS=FS}{gsub(/_/,".",$1);print}' yourfile.csv
-F 是字段分隔符,我们在这里将其设置为逗号。OFS=FS 将输出字段分隔符更改为您为 -F 指定的任何内容,以便您在输出结果中保留分隔符。$1 是第一列($2 是第二列,等等),因此如果您需要对其他列进行某些操作,您可以更改它。