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