grep只能显示匹配搜索模式的文字吗?

有没有办法让grep输出与搜索表达式匹配的文件的“单词”?

如果我想在许多文件中找到所有的“th”实例,我可以这样做:

grep "th" *

但输出结果会像(大胆的是我);

some-text-file : the cat sat on the mat  
some-other-text-file : the quick brown fox  
yet-another-text-file : i hope this explains it thoroughly 

我想要它输出的,使用相同的搜索,是:

the
the
the
this
thoroughly

这可能使用grep? 或者使用其他工具组合?


尝试grep -o

grep -oh "w*thw*" *

编辑:从菲尔的评论匹配

从文档:

-h, --no-filename
    Suppress the prefixing of file names on output. This is the default
    when there is only  one  file  (or only standard input) to search.
-o, --only-matching
    Print  only  the matched (non-empty) parts of a matching line,
    with each such part on a separate output line.

交叉分发安全答案(包括windows minGW?)

grep -h "[[:alpha:]]*th[[:alpha:]]*" 'filename' | tr ' ' 'n' | grep -h "[[:alpha:]]*th[[:alpha:]]*"

如果你使用的是旧版本的grep(比如2.4.2),它不包含-o选项。 使用上面的。 否则使用更简单的方式来维护下面的版本。

Linux交叉分发安全答案

grep -oh "[[:alpha:]]*th[[:alpha:]]*" 'filename'

总结-oh将正则表达式匹配输出到文件内容(而不是它的文件名),就像你期望正则表达式在vim / etc中工作的一样......然后,你将要搜索的是什么字或正则表达式是由你决定! 只要您保持POSIX而不是perl语法(请参阅下文)

更多来自grep的手册

-o      Print each match, but only the match, not the entire line.
-h      Never print filename headers (i.e. filenames) with output lines.
-w      The expression is searched for as a word (as if surrounded by
         `[[:<:]]' and `[[:>:]]';

原始答案之所以不适合每个人

w的用法因平台而异,因为它是扩展的“perl”语法。 因此,那些仅限于使用POSIX字符类的grep安装使用[[:alpha:]]而不是其相当于w perl。 有关更多信息,请参阅正则表达式的Wikipedia页面

最终,上面的POSIX答案将更加可靠,无论grep的平台(是原始的)

至于支持没有-o选项的grep,第一个grep输出相关的行,tr将空格分割成新的行,最后的grep过滤器仅用于相应的行。

(PS:我现在知道大多数平台,本来会补贴......但是总会有那些落后的)

为@ AdamRosenfield答案提供“-o”解决方法


您可以将空格转换为换行符,然后grep,例如:

cat * | tr ' ' 'n' | grep th
链接地址: http://www.djcxy.com/p/13715.html

上一篇: Can grep show only words that match search pattern?

下一篇: How to know whether View inside Scroll is Visible completely or no