【问题标题】:grep for words ending in 'ing' immediately after a comma逗号后立即以“ing”结尾的单词的grep
【发布时间】:2023-04-11 10:37:01
【问题描述】:

我正在尝试 grep 文件以查找在逗号后立即以 'ing' 结尾的单词的行,格式如下:

... we gave the dog a bone, showing great generosity ...
... this man, having no home ...

但不是:

... this is a great place, we are having a good time ...

我想找出“ing”这个词是逗号后第一个词的实例。看起来这在 grep 中应该是非常可行的,但我还没有弄清楚如何,或者找到了一个类似的例子。

我试过了

grep -e ", .*ing"

匹配逗号后的多个单词。类似的命令

grep -i -e ", [a-z]{1,}ing"
grep -i -e ", [a-z][a-z]+ing"

不要做我所期望的——它们与我的前两个示例中的短语不匹配。对此的任何帮助(或指向更好工具的指针)将不胜感激。

【问题讨论】:

  • 使用grep -Eegrep,应该没问题。

标签: regex text grep comma


【解决方案1】:

试试,\s*\S+ing

匹配您的前两个短语,不匹配您的第三个短语。

\s 表示“任何空白”,* 表示 0 个或更多,\S 表示“任何非空白”(大写字母是反转正则表达式中字符集的惯例 - 适用于 \b @ 987654326@\w\d),+ 表示“一个或多个”,然后我们匹配 ing

【讨论】:

  • 谢谢。我没有在man grep 中找到提到那些正则表达式标记,但现在我知道要寻找什么了!
  • @andryas 我使用regular-expressions.info/reference.html 作为我的正则表达式参考
  • 谢谢!这是一个有用的参考。
【解决方案2】:

您可以使用\b 标记来匹配单词边界(请参阅this page)。

类似下面的东西应该可以工作:

grep -e ".*, \b\w*ing\b"

编辑:除了现在我意识到\b 是不必要的,.*,\s*\w*ing 会起作用,正如 Patashu 指出的那样。我的正则表达式生锈了。

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多