sed를 사용하여 문자열에서 한 줄을 가로채는 방법은 무엇입니까?

sed를 사용하여 문자열에서 한 줄을 가로채는 방법은 무엇입니까?

저는 도메인 등록 기관 정보를 표시하는 스크립트를 작성 중이며 이미 가지고 있는 내용에서 몇 줄을 잘라내려고 노력하고 있으며 현재는 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"

관련 정보