Вернуть только номер строки, если шаблон "Существует" и "Не существует". используя команду "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

Если я бегу следовать команду без cut -f1 -d" Я вижу, что найти все "xyx" такой как в "xyxxyx", "xyxx", "xxyx" а также "yxyx" например, в первой строке, хотя это неверно, мой шаблон только и существует только в строках 2 и 4, и это третье слово в строке 2 и второе и 5-е слова в строке 4. См. снимок экрана:

введите описание здесь

И результат, который я хочу, это найти только отделить "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
Другие вопросы по тегам