Отображать точные совпадения только с помощью grep

Как я могу отображать только все задания, которые завершились успешно?

Когда я пробую команду ниже, она показывает как OK, так и NOTOK, поскольку у обоих есть «ОК».

ctmpsm -listall application | grep OK

person aftermath    schedule 24.10.2013    source источник


Ответы (8)


Вам нужно более конкретное выражение. Попробуйте grep " OK$" или grep "[0-9]* OK". Вы хотите выбрать шаблон, который соответствует тому, что вы хотите, но не будет соответствовать тому, что вам не нужно. Этот шаблон будет зависеть от того, как может выглядеть все содержимое вашего файла.

Вы также можете сделать: grep -w "OK", что будет соответствовать только целому слову «ОК», например «1 OK», но не будет соответствовать «1OK» или «OKFINE».

$ cat test.txt | grep -w "OK"
1 OK
2 OK
4 OK
person lurker    schedule 24.10.2013
comment
Это сработало нормально.. но теперь я пробую это с другими командами, такими как ctmpsm -listall application | grep -w "ABCD123", есть строки, отображающие ABCD123 и ABCD123@, но я хочу только ABCD123 - person aftermath; 25.10.2013
comment
Что разрешено после ABCD123? Просто конец строки? Пространство? Вкладка? Возможно любой из них? - person lurker; 25.10.2013
comment
@aguas, если после него в файле ничего нет (это в конце строки), вы можете использовать grep ".* ABCD123$" или просто grep " ABCD123$". Если он один на линии, то grep "^\s*ABCD123\s*$". - person lurker; 25.10.2013

Это может сработать для вас

grep -E '(^|\s)OK($|\s)'
person iruvar    schedule 24.10.2013
comment
Можете ли вы объяснить регулярные выражения здесь? - person Zypps987; 07.09.2017
comment
(^|\s) означает начало строки или пробела. ($|\s) означает конец строки или пробел. Таким образом, это будет соответствовать OK , а также OK или OK или OK . - person Brad; 19.10.2019

Это сработало для меня:

grep  "\bsearch_word\b"  text_file > output.txt  ## \b indicates boundaries. This is much faster.

or,

grep -w "search_word" text_file > output.txt
person Surya    schedule 11.05.2016

Вы можете использовать переключатель -v, чтобы исключить строки.

Это захватит любую строку, заканчивающуюся на OK, а затем удалит любую строку, содержащую NOT:

(Если OK не появляется в конце, просто удалите $.)

cat test.txt | grep 'OK$' | grep -v 'NOT'
person Brad    schedule 19.10.2019
comment
Спасибо! Я смог использовать именно эту вещь, чтобы проверить, установлен ли в моей системе memcache. Когда я попытался использовать grep, он вернул memcache, но также и memcached, так что ваше решение сработало отлично! php-memcache=$(php -m | grep 'memcache$' | grep -v 'НЕ') - person Robert Saylor; 20.05.2021

Попробуй это:

Alex Misuno@hp4530s ~
$ cat test.txt
1 OK
2 OK
3 NOTOK
4 OK
5 NOTOK
Alex Misuno@hp4530s ~
$ cat test.txt | grep ".* OK$"
1 OK
2 OK
4 OK
person plsgogame    schedule 24.10.2013

Попробуйте следующую команду, потому что она отлично работает:

grep -ow "yourstring"

crosscheck:-

Удалите экземпляр слова из файла, затем повторите эту команду, и она должна отобразить пустой результат.

person Lalit Singh    schedule 08.04.2015
comment
Понижение: -o неуместно, а -w уже предоставлено в ответе с наибольшим количеством голосов. - person tripleee; 08.04.2015
comment
Я не согласен, что это на самом деле дало лучший результат. Когда я использовал поиск xml, grep ничего не возвращал после xml, но возвращал то, что началось до xml. Как libxml. Когда я использовал этот пример, он вернул точное совпадение. php -м | grep -ow xml - person Robert Saylor; 20.05.2021

попробуй это:

grep -P '^(tomcat!?)' tst1.txt

Он будет искать определенное слово в текстовом файле. Здесь мы пытаемся найти слово tomcat

person vaibhav anjarlekar    schedule 02.11.2017
comment
Привет, добро пожаловать в Stack Overflow. Пожалуйста, отредактируйте свой ответ, чтобы он отражал заданный вопрос, то есть как отличить OK от NOTOK. Спасибо - person Spangen; 02.11.2017

Недавно я столкнулся с проблемой в grep. Я пытался сопоставить шаблон xyz, и grep вернул xy-z. Используя какое-то регулярное выражение, мы можем преодолеть это, но сопоставление всего слова grep не помогло. Поскольку сценарий, который я писал, является общим, я не могу ограничить поиск определенным способом, например, x.y.z или x.y-z..

Я решил, что быстрый способ - запустить grep, а затем проверить условие var="x.y.z" var1=grep -o x.y.z file.txt if [ $var1 == $var ] echo "Точное соответствие шаблону" else echo "Шаблон не соответствует точному" fi

https://linuxacatalyst.blogspot.com/2019/12/grep-pattern-matching-issues.html

person Tech-Med7    schedule 13.12.2019