【问题标题】:How would I change a person's birthday with sed if I'm provided with just the name?如果我只提供姓名,我将如何使用 sed 更改一个人的生日?
【发布时间】:2015-03-10 06:16:56
【问题描述】:

我要修改的那一行是大力水手的生日 我们必须假设我们不知道他的生日。

这就是我所做的,但它不起作用。

sed '/Popeye/s/[0-9]\/[0-9][0-9]\/[0-9][0-9]/[1][1]\/[1][4]\/[4][6]' DDdatebook

输入:

Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350

【问题讨论】:

  • 你的预期输出是什么?

标签: linux command-line sed


【解决方案1】:
sed '/Popeye/ s#:[0-9]\{1,2\}/[0-9]\{1,2\}/\([0-9]\{2\}\)\{1,2\}:#:[1][1]/[1][4]/[4][6]:#' YourFile
  • 您忘记了最后一个分隔符
  • 我建议使用除/之外的另一个,因为模式中存在,我在这种情况下选择#,因此不必转义内部/
  • 我添加了一个广泛的数字模式,允许 1 或 2 位表示日/月,2 或 4 位表示年(最后一个似乎只有 2,但以防万一或删除第二个选项)

【讨论】:

  • 这帮了我兄弟,你太棒了:)
  • @AnthonyCalmaRibao:请注意,SO 不鼓励使用“SMS-ese”——例如ty u so much(当然不需要y 和第一个u,确实吗?)。
【解决方案2】:

您可以使用awk 更改它

awk -F: '/Popeye/ {$4="01/01/01"}1' OFS=: file
Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:01/01/01:22350

如果您喜欢另一个日期,只需更改此部分"01/01/01"

将其写回原始文件:

awk -F: '/Popeye/ {$4="01/01/01"}1' OFS=: file > tmp && mv tmp file

【讨论】:

  • 很好,awk 是接下来要学习的东西,但我要坚持这个 :)
猜你喜欢
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
相关资源
最近更新 更多