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