【问题标题】:Use grep (or any other grep like linux cmd tool) to print whole word matching a particular substring in file使用 grep(或任何其他 grep,如 linux cmd 工具)打印匹配文件中特定子字符串的整个单词
【发布时间】:2014-10-07 21:42:13
【问题描述】:

我有一个文件,例如包含以下字符串。

File:
She sells sea shells on the seashore.

我想使用 grep(或任何其他 grep,如 linux cmd 工具)来打印与特定子字符串/正则表达式匹配的整个单词。在这种情况下,我想打印文件中与换行符中以 se 开头的单词匹配的所有单词出现。所需的输出如下:

Required output:
sells
sea
seashore

【问题讨论】:

  • 只有grep和grep??
  • 你是对的......任何工具实际上都可以工作......让我更新问题:)
  • @Jite 值得注意的是,regex SO 标签要求该标签的用户还包括他们遇到正则表达式问题的语言或工具的标签(因为不同的语言/工具有不同的正则表达式风格和规则)。所以,在这里指定grep 很好。
  • @Jite 这是一种相当粗鲁的方式告诉我我误解了你相当简短而模糊的评论......
  • @ajp15243 并不是要侮辱你,如果你有这种感觉,对不起。我希望这个笑脸能暗示这不是刻薄的意思。

标签: regex linux bash shell grep


【解决方案1】:

使用\<将se锚定到单词的开头,\w*添加0个或多个单词字符:

$ grep -o '\<se\w*' filename.txt 
sells
sea
seashore
$ 

【讨论】:

  • 只是一个旁注,而是使用单引号而不是双引号来防止shell扩展错误。
【解决方案2】:
grep -oP '(^| )\Kse[^ .]*'

输出:

sells
sea
seashore

【讨论】:

  • 这也是一种选择
【解决方案3】:

这样就可以了

grep -o '\bse\w*' filename.txt

任何人都可以做得更漂亮或看到它不应该工作的原因吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2016-04-07
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多