我有一个不同的场景。为了使它更清楚,这就是我想要的。
我有一个名为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来获得结果而不是tr
,sed
,awk
等其他任何东西。
我不知道我的问题标题是否合适。所以我要求更改它以使其更有意义。
我很乐意得到解决方案。
提前致谢!!
答案 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