我有此示例文件供我输入:
xyxxyx xyxx xxyx yxyy yxyx
xxyxxx xx xyx xxx x y x xxyy
yxxy xyxxy xxy y x y
xyxy xyx yyxx xyyxyxy xyx
yxyy xyy yxyx xxyxyyx
我尝试查找"xyx"
行中存在的单词并返回行号。例如,在这个输入中只有第 2 行和第 4 行"xyx"
,而我想要的结果只有 2 和 4(行号),但grep
命令给了我全部 5 行。结果如下:
grep -n "xyx" test | cut -f1 -d:
1
2
3
4
5
如果我运行 follow 命令而不使用,cut -f1 -d"
我会看到在第一行中找到所有"xyx"
诸如、和之类的内容"xyxxyx"
,虽然"xyxx"
这是错误的,但我的模式只存在于第 2 行和第 4 行,它是第 2 行的第三个单词以及第 4 行的第二个和第五个单词。看屏幕截图:"xxyx"
"yxyx"
而我想要的结果是,只找到分离的部分"xyx"
并返回其行号。
如果模式存在,我想要的输出就是:
2
4
如果模式不存在,我想要的输出就是:
1
3
5
而且我也不知道应该使用哪个命令来检查模式是否存在。我尝试了所有可能的grep
命令组合,但都失败了。
提前感谢您的帮助。
答案1
您需要添加-w
选项
$ grep -wn 'xyx' file | cut -d: -f1
2
4
从man grep
-w, --word-regexp
Select only those lines containing matches that form whole
words. The test is that the matching substring must either be
at the beginning of the line, or preceded by a non-word
constituent character. Similarly, it must be either at the end
of the line or followed by a non-word constituent character.
Word-constituent characters are letters, digits, and the
underscore.
要反转匹配,请添加-v
开关,即
grep -vwn 'xyx' file | cut -d: -f1