bash 스크립트 - grep에서 $variable을 사용하는 방법

bash 스크립트 - grep에서 $variable을 사용하는 방법

저는 사용자가 도메인 이름(example.com)을 입력한 다음 whois 명령 출력에서 ​​이메일 주소를 가져오는 간단한 bash 스크립트를 작성하고 있습니다.

동일한 입력 도메인을 가진 이메일을 찾고 싶습니다([이메일 보호됨]).

example.comdomain( ) 을 작성했지만 grep 함수에서 해당 변수를 사용하는 $domain방법을 모르는 경우 다음이 작동합니다. $domain어떤 도움이라도 대단히 감사하겠습니다. 감사합니다.

whois $도메인 이름 | grep -m1 -EiEio '\b[A-Z0-9._%+-]+@[$도메인 이름]+\.[AZ]{2,4}\b'

답변1

변수는 작은따옴표 내에서 확장되지 않습니다. 이 경우에는 큰따옴표로 전환하는 것만으로도 충분합니다. 또한 제거 [하고 ]둘러싸십시오 $domain. 대괄호를 사용하면 도메인 이름의 단일 문자와 일치하는 대괄호 표현식을 만들 수 있습니다(실제 도메인 이름 자체는 아님).

결국, 당신은 다음과 같은 것을 얻게 될 것입니다

whois "$domain" |
grep -m1 -Eio "\b[[:alnum:]._%+-]+@$domain\b"

\.[A-Z]{2,4}실제로 사용할 용도가 보이지 않아 표현식 끝 부분을 제거하고 기호 앞의 영숫자 문자를 일치시키기 위해 기호 이름을 사용했습니다 @.

또 다른 개선 사항은 모든 점을 다음으로 바꾸는 것입니다 $domain.\.

whois "$domain" |
grep -m1 -Eio "\b[[:alnum:]._%+-]+@${domain//./\\.}\b"

이를 위해서는 비표준 인수 대체를 이해하는 bash다른 쉘이 필요합니다.${variable//pattern/word}

관련 정보