저는 도메인 등록 기관 정보를 표시하는 스크립트를 작성 중이며 이미 가지고 있는 내용에서 몇 줄을 잘라내려고 노력하고 있으며 현재는 whois로부터 들여쓰기된 텍스트를 모두 가져오고 있습니다. 이제 도메인 이름, Whois 서버 및 추천 URL을 삭제하고 싶습니다. 시작하는 내용을 기준으로 줄을 삭제하는 sed를 찾았지만 기존 파일이 아닌 기존 문자열과 함께 사용하려고 하기 때문에 작동하지 않는 것 같습니다. 작동하도록 어떻게 수정하나요?
#!/bin/bash
cyan='\033[0;34m'
white='\033[1;37m'
purple='\033[38;5;129m'
NC='\033[0m'
reg=$(whois "$1" | grep -Ei '^[[:blank:]]+.*:[[:blank:]]' | sed -e 's/^[[:space:]]*//')
reg1=$(sed /^Domain/d $reg)
printf "${cyan}Below is my best attempt at finding Registrar data:\n"
printf "${white}$reg${NC}\n${purple}Made by Noah Yamamoto${NC}\n"
답변1
문자열과 함께 sed 사용하기
문제를 올바르게 식별했습니다. 문제 $reg
는 파일이 아니라 문자열입니다. 따라서 문자열을 sed
표준 입력 으로 제공해야 합니다 . 바꾸다:
reg1=$(sed /^Domain/d $reg)
vs (bash의 경우):
reg1=$(sed /^Domain/d <<<"$reg")
또는 일반 POSIX 셸의 경우 다음을 사용합니다.
reg1=$(echo "$reg" | sed /^Domain/d)
단순화: grep 및 sed 명령을 하나의 명령으로 결합
grep과 두 개의 sed 명령을 하나의 sed 명령으로 결합할 수 있습니다.
#!/bin/bash
cyan='\033[0;34m'
white='\033[1;37m'
purple='\033[38;5;129m'
NC='\033[0m'
reg=$(whois yahoo.com | sed -En '/^[[:space:]]*Domain/d; /: / s/^[[:blank:]]+//p')
printf "${cyan}Below is my best attempt at finding Registrar data:\n"
printf "${white}$reg${NC}\n${purple}Made by Noah Yamamoto${NC}\n"