使用grep搜索匹配的字符串,但搜索应仅显示字符串的其余部分,而不显示匹配的单词

使用grep搜索匹配的字符串,但搜索应仅显示字符串的其余部分,而不显示匹配的单词,grep,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 S

我有一个不同的场景。我想说得更清楚一点

我有一个名为
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
Saurav
    Sumeet
Punit Sharma
  N. Senthil
我不想在搜索结果中显示单词
Kumar
。i、 e不带Kumar的搜索结果如下所示:

Saurav Kumar
    Sumeet Kumar
Punit Kumar Sharma
  N. Senthil Kumar
Saurav
    Sumeet
Punit Sharma
  N. Senthil
还有一件事,我必须只使用grep来获得结果,而不是像
tr
sed
awk
等任何东西

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

我将非常高兴得到解决方案


提前谢谢

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

您可以使用使用
grep
匹配所需的文本部分,但我认为您无法获得所需格式的输出。比如说:

grep -P '\w+\b(?<!\bKumar)' yourinput
单词周围的星号
**
表示匹配的单词

但是,如果您试图只打印匹配的单词,这些单词实际上不会在同一行中:

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

我可以稍微接近的结果与额外的新线路

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

您可以使用负查找来匹配所需的部分,但是使用
grep
无法获得所需格式的输出。这就是问题所在。我提到的场景与实际问题相比根本不算什么。无论如何,我必须使用
grep
,因为我使用的是选项
——行缓冲
。虽然我会试试你的答案。希望它能起作用\既然您提到了
--line buffered
,您有没有研究过
stdbuf
?它只是
grep
命令的一部分,也就是我想要的,并且正在使用
--line buffered
。但另一个答案看起来更具体、更正确。我感谢你的努力。:)非常感谢。你几乎解决了这个问题。如果我多接一行也没关系。我检查过,只有当匹配词介于两者之间时才会发生。@SauravKumar很高兴它对你有用。你给了我一个很好的挑战!
Saurav 
    Sumeet 
Punit 
 Sharma
  N. Senthil