我得到的是客户预约的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

10-05 18:12