【问题标题】:sed include preceding nullsed 包括前面的 null
【发布时间】:2019-01-13 13:55:59
【问题描述】:

我拥有的是客户预约的 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,它不受任何内容(空字符?)和逗号限制,因此它不会替换匹配的字符一个数字的中间。我只是不知道该怎么做。

【问题讨论】:

  • 这里没有空值。

标签: linux sed sh


【解决方案1】:
$ 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 之后将确保部分数字不匹配
  • 在替换部分,在名称后添加,
  • 作为一种好的做法,仅对替换部分使用双引号,对命令的其余部分使用单引号:sed 's/^'"$custnum"',/'"$fullName"',/g'

延伸阅读:GNU sed manual - Regular Expressions

【讨论】:

  • 工作就像一个魅力。谢谢!
猜你喜欢
  • 2018-10-25
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多