grep과 같은 방식으로 문자열을 기호와 일치시키는 방법은 무엇입니까? [복사]

grep과 같은 방식으로 문자열을 기호와 일치시키는 방법은 무엇입니까? [복사]

다음 내용(또는 이와 유사한 내용)이 포함된 파일이 있습니다.

# cat /var/www/htpasswd
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/

다음과 같이 일치시켜 항목이 존재하는지 확인하려고합니다.

# grep --fixed-string "foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/" /var/www/htpasswd
#

하지만 아무것도 일치하지 않습니다. 이유 및/또는 방법에 대한 아이디어가 있습니까?

처음에는 달러 기호인 줄 알았는데 다음과 같이 작동합니다.

# grep --fixed-string "foo:$ap" /var/www/htpasswd
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/
#

답변1

작은따옴표(')를 사용하면 $nnn이 변수로 처리되지 않습니다. "가 있는 문자열은 삽입된 문자열이고, '가 있는 문자열은 삽입되지 않습니다.

문자열 앞에 echo를 추가할 때 출력을 살펴보세요.

$ echo "foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/"
foo:3wJ8tiQ/
$ echo 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/'
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/

답변2

다음과 같이 작은따옴표를 사용하세요.

grep 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/' /vaw/www/htpasswd

답변3

grep이 도착하기 전에 쉘이 결과를 해석하는 문제를 방지하려면 --fixed-strings 인수에 큰따옴표 대신 작은따옴표를 사용해야 합니다. https://stackoverflow.com/questions/6697753/difference- Between-single-and-double-quotes-in-bash

grep --fixed-string 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/' /var/www/htpasswd

관련 정보