如何使用通配符grep匹配的单词,而不是周围的行?

时间:2018-03-15 23:53:43

标签: linux bash grep

也许是一个奇怪的问题,但我试图用grep命令的输出来选择匹配的单词而不是行。这个词里面还有一个通配符。

git log --format=%aD <file> | tail -1 | grep -oh 201

命令的第一部分和第二部分检查git日志中的文件,并获取与创建日期和时间相关的行。我正在尝试编写一个bash脚本,它在创建它的年份做了一些事情,所以我需要抓住那个单词(年份)。

查看grep文档,-o专门打印匹配的单词(-h禁止文件名)。我找不到任何允许匹配它匹配的单词的 rest 的东西(尽管我可能只是间距)。

所以上一个命令的输出是:

201

我需要它(作为一个例子):

2017

非常感谢帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用.作为通配符:

$ echo 'before2017after' | grep -o '201.'
2017

或者,更好的是,指定第四个字符是数字:

$ echo 'before2017after' | grep -o '201[[:digit:]]'
2017

注意:

  1. 由于您从stdin获取输入,因此没有文件名。因此,在这种情况下,-h不会改变任何内容。

  2. [[:digit:]]是一种指定数字的unicode安全方式。