У меня есть этот файл примера для моего входа:
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
команда, но я перестал работать.
Спасибо за помощь заранее.
Необходимо добавить -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