我得到的是客户预约的csv。我所做的是从一个SQL文件中转储它们,然后将其转换为其他程序可用的内容。。。特别是一个日历应用程序,虽然这不是重点。顾客是用数字来识别的;不是用名字。
854,2018-08-19 08:30:00
2538546,2018-08-21 13:00:00
没问题,我想用名称替换数字,所以我按数字拉取名称,然后运行sed命令,如下所示。。。
sed -i -e "s/$custnum/$fullName/g" ~/Appointments/Appts.csv
但这就产生了一个问题,因为它把上面的csv变成了
John Doe,2018-08-19 08:30:00 #This is right
253John Doe6,2018-08-21 13:00:00 #This is totally not right
我想我需要它不仅搜索/替换$custnum,而且特别是$custnum,它没有任何限制(空字符?)用逗号,所以它不会替换数字中间的匹配字符。我只是不知道怎么做。
最佳答案
$ cat ip.txt
854,2018-08-19 08:30:00
2538546,2018-08-21 13:00:00
$ custnum=854
$ fullName='John Doe'
$ sed "s/^$custnum,/$fullName,/g" ip.txt
John Doe,2018-08-19 08:30:00
2538546,2018-08-21 13:00:00
^
是一个元字符,用于将搜索定位到行首,
在custnum
之后将确保部分号码不匹配在replacement部分,在name后面添加
,
作为一个好的实践,只对替换部分使用双引号,并对命令的其余部分使用单引号:
sed 's/^'"$custnum"',/'"$fullName"',/g'
进一步阅读:GNU sed manual - Regular Expressions