如何去除CSV文件第三列的前导0?现有sed命令无法实现
去除CSV文件第三列前导0的解决方法
你之前用的cat tel.csv | sed 's/^0*//'之所以没效果,是因为这个命令只会替换整行开头的前导0,而咱们要处理的是第三列开头的0,完全没命中目标位置。
下面给两个可行的解决办法:
方法一:用awk处理(推荐)
awk天生适合处理带分隔符的文本,直接定位到第三列修改:
awk 'BEGIN{FS=OFS=","} {sub(/^0+/, "", $3); print}' tel.csv
BEGIN{FS=OFS=","}:指定输入和输出的分隔符都是逗号,保证处理后CSV格式不变sub(/^0+/, "", $3):把第三列开头的一个或多个0替换成空- 最后打印修改后的整行
处理后输出结果:
test,01test,1234567890
test,01test,9876054321
方法二:改进sed命令
如果习惯用sed,可以用正则定位到第三列的位置:
sed -E 's/^([^,]+,[^,]+,)0+/\1/' tel.csv
-E:启用扩展正则,不用给括号转义,写法更简洁^([^,]+,[^,]+,)0+:匹配行首的前两列(每列是逗号前的任意非逗号字符),捕获这部分内容后,匹配第三列开头的连续0\1:替换成之前捕获的前两列内容,相当于去掉第三列的前导0
两种方法都能实现需求,awk的逻辑更直观,后续如果要处理更复杂的CSV规则(比如列中含逗号的情况)也更灵活。
内容的提问来源于stack exchange,提问作者gareth0402
相关产品推荐
相关产品推荐

