Печатайте несопоставленные шаблоны, а не непревзойденное содержимое файла, используя grep - PullRequest
2 голосов
/ 13 марта 2020

Я использую команду grep в bash, чтобы найти несколько ключевых слов / шаблонов, которые не нашли соответствия

Например, приведенная ниже команда возвращает ключевые слова / шаблоны, которые соответствуют

grep -oehE '(кошка | собака | яблоко | манго | летучая мышь)' temp.txt | сортировать | uniq

Но я ищу команду, которая может выполнять следующие действия:

temp.txt contains
This is a dog the best
Dog are the best
doG
dog
My best buddy is dog
Love mango and candy

Результат поиска, который я ищу,

cat 
apple
bat

Вывод - это шаблоны, которые не совпадают с данными в файле.

Я искал похожую проблему, и ближе всего я мог найти ниже пост, но он имеет дело с файлами, а не со всеми в командной строке

Аналогичная проблема с использованием файла

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 13 марта 2020

Используя awk, вы можете:

$ awk -v p="cat|dog|apple|mango|bat" '  # search words
BEGIN {                                 # first make hash of the search words
    split(p,t,/\|/)
    for(i in t)
        a[t[i]]
}
{
    for(i=1;i<=NF;i++)                   # for each record and word in the record
        delete a[$i]                     # remove them from the hash
}
END {                                    # in the end
    for(i in a)                          # in order that appears random
        print i                          # output the leftovers
}' temp.txt

и иметь результат:

bat
apple
cat

С grep:

$ echo "cat|dog|apple|mango|bat" | tr \| \\n > pats
$ grep -vf temp.txt pats
cat
apple
bat

С grep без участия файлов:

$ echo -e cat\\ndog\\napple\\nmango\\nbat | grep -vf temp
cat
apple
bat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...