繁体   English   中英

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

[英]How to grep for a matching word, not the surrounding line, with a wildcard?

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

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

该命令的第一部分和第二部分检查git日志中的文件,并获取与创建日期和时间有关的行。 我试图编写一个bash脚本,该脚本对创建的年份起作用,所以我只需要抓住一个单词(年份)。

查看grep文档,-o专门打印匹配的单词(而-h取消显示文件名)。 但是,我找不到任何可以匹配其余匹配单词的东西(我可能只是空格)。

因此,先前命令的输出为:

201

我需要做到这一点(例如):

2017

帮助将不胜感激!

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

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

或者,最好将第四个字符指定为数字:

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

笔记:

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

  2. [[:digit:]]是指定数字的Unicode安全方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM