텍스트의 grep 및 대괄호

텍스트의 grep 및 대괄호

다운로드한 파일을 다음과 같이 로그에 저장합니다.

[source] filename

파일을 여러 번 다운로드하지 않으려면 다음 [source] filename을 grep합니다.

if ! grep "$signature" downloaded.log > /dev/null; then
    wget ...
fi

하지만grep으로 라인을 시작하면 [원하는 대로 작동하지 않습니다.

signature="[source] filename"
echo $signature | grep "$signature"
echo $signature | grep "\$signature" #trying to escape first bracket

둘 다 아무것도 반환하지 않습니다.

스마트한 솔루션이 있나요?

()괄호 , 중괄호 {}또는 다른 것으로 전환하기 위해 코드를 변경할 필요가 없다면 좋을 것입니다.<>

답변1

먼저 변수를 인용한 다음 -F --fixed-strings대괄호가 정규식 메타 문자로 해석되지 않도록 스위치를 사용해야 합니다.

echo "$signature" | grep -F "$signature"

-q --quiet그런 다음 스위치 도 사용해야 하므로 grep첫 번째 항목이 나타나면 종료하십시오. 이는 단지 속도상의 이유 때문입니다.

if ! grep -Fq "$signature" downloaded.log; then
    wget ...
fi

관련 정보