我有一个 CSV 文件,我想编辑 ipAddress 列以删除逗号。基本上120.30.19, 119.234.76
应该改为
120.30.19 119.234.76
这是我的数据:
Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19, 119.234.761,Value1,Value2
我希望它是:
Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2
我唯一想要更改的是 IP 地址。我得到了这个命令:
sed 's/\(\([^,]*,\)\{9\}[^,]*\),/\1/g'
data.csv 可以工作,但是它的作用是合并 IPAddress 和 OtherColumn1 所以我最终得到类似的东西:
Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddressOtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2
我知道这是一个简单的修复,但任何帮助将不胜感激,老实说,我不确定 sed 命令有什么问题以及为什么这样做。这是我第一次必须执行 shell 脚本或正则表达式,所以我的终端肯定有很多需要改进的地方。
谢谢!
答案1
答案2
只需在你的模式之前添加1 !
这样的
sed '1 ! s/\(\([^,]*,\)\{9\}[^,]*\),/\1/g'
这会跳过标题
输出
$ sed '1 ! s/\(\([^,]*,\)\{9\}[^,]*\),/\1/g' d
Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2
答案3
使用任何 awk:
$ awk 'BEGIN{FS=OFS=","} NF>12{$10=$10 $11; $11=$12; $12=$13; sub(/,[^,]*$/,"")} 1' file
Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2
或者如果您愿意:
$ awk 'BEGIN{FS=OFS=","} {print $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 (NF>12 ? $11 : ""), $(NF-1), $NF}' file
Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2