【问题标题】:How to grep for a matching word, not the surrounding line, with a wildcard?如何使用通配符查找匹配的单词,而不是周围的行?
【发布时间】:2018-03-15 23:53:42
【问题描述】:

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

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

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

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

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

201

我需要它(例如):

2017

我们将不胜感激!

【问题讨论】:

    标签: linux bash grep


    【解决方案1】:

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

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

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

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

    注意事项:

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

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

    【讨论】:

    • 你太棒了。感谢您的解释和帮助!
    猜你喜欢
    • 2017-05-25
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多