![grep과 같은 방식으로 문자열을 기호와 일치시키는 방법은 무엇입니까? [복사]](https://linux55.com/image/37928/grep%EA%B3%BC%20%EA%B0%99%EC%9D%80%20%EB%B0%A9%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EA%B8%B0%ED%98%B8%EC%99%80%20%EC%9D%BC%EC%B9%98%EC%8B%9C%ED%82%A4%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
다음 내용(또는 이와 유사한 내용)이 포함된 파일이 있습니다.
# 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