如何用点替换所有下划线

如何用点替换所有下划线

我想替换 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 是第二列,等等),因此如果您需要对其他列进行某些操作,您可以更改它。

相关内容