파일에 문자열이 있는지 어떻게 확인할 수 있나요?

파일에 문자열이 있는지 어떻게 확인할 수 있나요?

329,현재 .NET 파일에 정확한 문자열이 있는지 확인하는 bash 스크립트를 작성 중입니다 myfile. 웹을 통해 검색해서 몇 가지 답변을 찾았지만 에 -x비해 숫자가 많아 매개변수를 사용할 수 없습니다 . 그리고 매개변수 없이도 내가 원하지 않는 결과를 얻을 수 있습니다 .329,myfile-xExists329

나는 노력했다;

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,) 또는 329줄 끝에 있는 a( 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

문안 인사

관련 정보