변수에서 처음 n 줄과 마지막 n 줄을 제거하는 bash 스크립트를 얻으려면 어떻게해야합니까?

Egrodo

"dig ns google.com"을 수행하고 답변 섹션을 제외한 모든 결과를 잘라내는 스크립트를 만들고 있습니다.

지금까지 :

#!/bin/bash

echo -n "Please enter the domain: "
read d
echo "You entered: $d"
dr="$(dig ns $d)"
sr="$(sed -i 1,10d $dr)"
tr="$(head -n -6 $sr)"
echo "$tr"

이론적으로 이것은 작동합니다. sed 및 head 명령은 스크립트 외부에서 개별적으로 작동하여 처음 10 개와 마지막 6 개를 각각 잘라 내지 만 스크립트 안에 넣으면 sed가 오류와 함께 다시 나타나고 변수를의 일부로 읽으려고하는 것처럼 보입니다. 입력이 아닌 명령. 오류는 다음과 같습니다.

sed: invalid option -- '>'

지금까지 변수를 입력으로 읽는 방법을 찾을 수 없었습니다. ""및``로 둘러 보려고했지만 작동하지 않습니다. 나는이 전체 bash 스크립팅에 익숙하지 않으며 어떤 도움이라도 좋을 것입니다!

케이스

sed명령 줄이 아닌 stdin에서 입력을 가져 오므로 스크립트가 이론적으로나 실제적으로 작동하지 않습니다. sed -i 1,10d $dr는 사용자가 생각하는대로 수행하지 않습니다. sed"$ dr"값을 처리 할 파일 이름 목록으로 취급합니다.

시도 echo "$dr" | sed -e '1,10d'sed -e '1,10d' <<<"$dr".

BTW, 여기 주위에 큰 따옴표 사용해야합니다"$dr" . 그렇지 않으면으로 sed구분 된 여러 줄의 입력을 \n얻지 못하고 하나의 입력 줄만 얻습니다.

또는 NS 레코드 만 가져 오려면 모든 sed명령 을 다음 명령 하나로 대체하십시오 .

tr=$(echo "$dr" | sed -n -e '/IN[[:space:]]\+NS[[:space:]]/p')

또는 모든 중간 단계를 제거하고 다음을 실행하십시오.

tr=$(dig ns "$d" | sed -n -e '/IN[[:space:]]\+NS[[:space:]]/p')

또는 다음을 사용하여 네임 서버의 호스트 이름 만 가져올 수 있습니다.

tr=$(dig ns "$d" | awk '/IN[[:space:]]+NS[[:space:]]/ {print $5}')

BTW,의 출력은 host -t ns domain.example.com의 출력보다 구문 분석하기가 더 쉬울 수 있습니다 dig.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관