使用grep搜索匹配的字符串,但搜索应该只显示没有匹配字的字符串的其余部分

时间:2013-10-31 15:50:44

标签: grep

我有一个不同的场景。为了使它更清楚,这就是我想要的。

我有一个名为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 。我,没有Kumar的搜索结果是这样的:

Saurav
    Sumeet
Punit Sharma
  N. Senthil

还有一件事我只能使用grep来获得结果而不是trsedawk等其他任何东西。

我不知道我的问题标题是否合适。所以我要求更改它以使其更有意义。

我很乐意得到解决方案。

提前致谢!!

2 个答案:

答案 0 :(得分:2)

使用grep无法完成您要找的内容。

您可以使用grep使用negative lookbehind 匹配所需的文字部分,但我不认为您可以获得所需形式的输出。例如,说:

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

答案 1 :(得分:2)

我可以通过额外的新行

稍微接近结果
grep -P -o -i '.*(?=kumar)|(?<=kumar).*' file | grep -v '^\s*$'

输出

Saurav 
    Sumeet 
Punit 
 Sharma
  N. Senthil