如果模式“存在”和“不存在”,则仅返回行号。使用“grep”命令

如果模式“存在”和“不存在”,则仅返回行号。使用“grep”命令

我有此示例文件供我输入:

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

相关内容