perl - sed - 在第一次正则表达式匹配后替换逗号
问题描述
我试图对一般格式的行执行以下替换:
BBBBBBB.2018_08,XXXXXXXXXXXXX,01/01/2014,"109,07",DF,CCCCCCCCCCC, .......
如您所见,问题在于它是一个逗号分隔的文件,其中一个包含逗号小数的特定字段。我想用一个点替换它。
我试过这个,以替换匹配后第一次出现的模式,但无济于事,有人可以帮助我吗?
sed -e '/,"/!b' -e "s/,/./"
sed -e '/"/!b' -e ':a' -e "s/,/\./"
提前致谢。awk 或 perl 解决方案也会对我有所帮助。这是一个 awk 的努力:
gawk -F "," 'substr($10, 0, 3)==3 && length($10)==12 { gsub(/,/,".", $10); print}'
这产生了相同的文件不变。
解决方案
CSV 文件应awk
使用适当的FPAT
变量进行解析,该变量定义构成此类文件中有效字段的内容。一旦你这样做了,你就可以遍历字段来做你需要的替换
gawk 'BEGIN { FPAT = "([^,]+)|(\"[^\"]+\")"; OFS="," }
{ for(i=1; i<=NF;i++) if ($i ~ /[,]/) gsub(/[,]/,".",$i);}1' file
请参阅我的这个答案以了解如何使用FPAT
变量定义和解析 CSV 文件内容。另请参阅使用 awk 就地保存修改以进行就地文件修改,例如sed -i''
.
推荐阅读
- javascript - 如何在单击复选框时改进和评估 var 并修改对象属性?
- javascript - ReactJS 中的 DOM 操作和页面重新加载
- python - 对于数据帧中的每个 lat,lng 循环通过另一个数据帧并进行比较
- java - 如何在 Spring Boot 中使用 KeyHolder?
- selenium-webdriver - 如何在不传递selenium java中的元素的情况下实现wait()
- java - 如何优雅地解析字符串以获得您所需要的?
- java - 如何为线条绘制形状制作圆形破折号或圆点
- java - 什么解析策略最适合 Http 消息?
- c# - 自动选择下拉列表中的一项 asp.net c#
- sql - 获取 SQL Server 上员工的重新分配时间(以天为单位)