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

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

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

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

아래 명령은 도메인( )을 작성하면 작동 example.com하지만 에서는 작동하지 않습니다 $domain. $domaingrep 함수 내에서 변수를 사용하는 방법을 모르겠습니다 . 어떤 도움이라도 대단히 감사하겠습니다. 감사합니다.

$도메인 후이즈 | 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}매개변수 대체를 이해하는 다른 쉘이 필요합니다.

관련 정보