3

我有一个不同的场景。为了更清楚这里是我想要的。

我有一个名为myfile以下信息的文件:

Saurav Kumar
    Sumeet Kumar
Punit Kumar Sharma
      Supreet Prasad Sinha
  N. Senthil Kumar
 A. Salai Nayagan
.
.

等等..

现在,如果我想获得Kumar作为一部分的名称,我可以简单地使用:

grep -i "kumar" myfile

所以它会像这样返回:

Saurav Kumar
    Sumeet Kumar
Punit Kumar Sharma
  N. Senthil Kumar

我想要的不是Kumar在搜索结果中显示这个词。Kumari,e 没有这样的搜索结果:

Saurav
    Sumeet
Punit Sharma
  N. Senthil

tr还有一件事我必须只使用 grep 来获得结果,而不是像, sed,awk等其他任何东西。

我不知道我的问题标题是否合适。因此,我要求对其进行更改以使其更有意义。

我会很高兴得到解决方案。

提前致谢!!

4

2 回答 2

2

您正在寻找的内容无法使用grep.

您可以使用负向查找匹配所需的文本部分grep,但我认为您无法获得所需形式的输出。例如,说:

grep -P '\w+\b(?<!\bKumar)' yourinput

会导致:

**Saurav** Kumar
    **Sumeet** Kumar
**Punit** Kumar **Sharma**
      **Supreet Prasad Sinha**

单词周围的星号**表示匹配的单词。

但是,如果您尝试仅打印匹配的单词,则它们不会真正在同一行:

$ grep -oP '\w+\b(?<!\bKumar)' yourinput
Saurav
Sumeet
Punit
Sharma
Supreet
Prasad
Sinha

使用负前瞻,您可以说:

grep -P '(?!Kumar\b)\b\w+' input
于 2013-10-31T16:19:05.333 回答
2

我可以通过额外的新线稍微接近结果

grep -P -o -i '.*(?=kumar)|(?<=kumar).*' file | grep -v '^\s*$'

输出

Saurav 
    Sumeet 
Punit 
 Sharma
  N. Senthil 
于 2013-10-31T16:26:23.047 回答