
사용자가 도메인 이름(example.com)을 입력하고 whois 명령 출력에서 이메일 주소를 가져오는 간단한 bash 스크립트를 작성 중입니다.
동일한 입력 도메인을 가진 이메일만 grep하고 싶습니다([이메일 보호됨]).
아래 명령은 도메인( )을 작성하면 작동 example.com
하지만 에서는 작동하지 않습니다 $domain
. $domain
grep 함수 내에서 변수를 사용하는 방법을 모르겠습니다 . 어떤 도움이라도 대단히 감사하겠습니다. 감사합니다.
$도메인 후이즈 | 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}
매개변수 대체를 이해하는 다른 쉘이 필요합니다.