Как проверить, существует ли строка в файле?

Как проверить, существует ли строка в файле?

В настоящее время я пишу скрипт bash, который должен проверять, существует ли точная строка 329,в myfile. Я поискал в Интернете и нашел несколько ответов, но я не могу использовать -xпараметры, потому что у меня больше чисел, чем 329,в myfile. И без -xпараметра я могу получить Existsрезультат с 329too, что мне не нужно.

Я пытался;

if grep -xqFe "329," "myfile"; then
    echo -e "Exists"
else
    echo -e "Not Exists"
fi

И на выходе получилось:

Not Exists

Внутри myfile;

329, 2, 57

Как мне решить эту проблему?

решение1

Здесь это -xне имеет значения. Это означает (из man grep):

-x, --line-regexp
       Select  only  those  matches that exactly match the whole line.
       For a regular expression pattern, this is  like  parenthesizing
       the pattern and then surrounding it with ^ and $.

Так что это полезно только если вы хотите найти строки, которые не содержат ничего, кроме точной строки, которую вы ищете. Вам нужна опция -w:

-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.  This option has no effect if -x is also specified.

Это будет соответствовать, если вы найдете вашу целевую строку как отдельное "слово", как строку, окруженную символами "не-слово". Вам также не нужно здесь -F, это полезно только если ваш шаблон содержит символы со специальным значением в регулярных выражениях, которые вы хотите найти буквально (например, *), и вам вообще не нужно -e, это было бы необходимо, если бы вы хотели задать более одного шаблона. Итак, вы ищете:

if grep -wq "329," myfile; then 
    echo "Exists" 
else 
    echo "Does not exist"
fi

Если вы также хотите выполнить сопоставление, когда число является последним в строке, то есть ,после него ничего не следует, вы можете использовать grep -Eрасширенные регулярные выражения, а затем выполнить сопоставление.илиa, 329за которым следует запятая ( 329,) или a 329, которая находится в конце строки ( 329$). Вы можете объединить их следующим образом:

if grep -Ewq "329(,|$)" myfile; then 
    echo "Exists" 
else 
    echo "Does not exist"
fi

решение2

Другой альтернативой может быть:

if cat myfile | tr "," "\n" | grep -xqF "329"; then
    echo -e "Exists"
else
    echo -e "Not Exists"
fi

С уважением

Связанный контент