저는 nslookup -q=srv SOME_ADDRESS
반환된 주소를 배열에 사용하고 저장하고 싶습니다. nslookup
반품:
Server: 123.456.789.123
Address: 123.456.789.123#12
SOME_ADDRESS service = 0 0 1234 address-1.i.want.
SOME_ADDRESS service = 0 0 1234 address-2.i.want.
SOME_ADDRESS service = 0 0 1234 address-3.i.want.
저는 아직도 정규식을 배우고 있으며 문자열을 배열에 넣습니다.
array=($(nslookup -q=srv SOME_ADDRESS | grep -o ' [a-z0-9.-]*[a-z0-9].$'))
이것은 나에게 빈 공간을 제공합니다 [ ]address-3.i.want.
.[ ]
adress-3.i.want
.
시작이나 끝 부분에 공백이 없으면 어떻게 일치시키나요? (결과 문자열에서 문자를 제거하는 대신 정규식을 사용하십시오. 다른 문자열을 추가 grep
하거나 cut
파이프하는 방법을 알고 있지만 정규식을 편집하여 원하는 작업을 수행할 수 있다고 확신합니다.)
답변1
GNU로 작업을 수행할 수 있습니다.sed
nslookup -q=srv "${SOME_ADDRESS}" |
sed -n '/\.$/s///;T;/.* /s///p' |
mapfile -t array
존재하다sed
-n
기본적으로 줄은 인쇄되지 않습니다./\.$/s///
줄 끝의 "."를 제거하세요.T
끝으로 이동(위의 내용이 발생하지 않으면 아무 것도 인쇄되지 않음을 의미)/.* /s///p
인쇄물이 남을 때까지 모두 삭제
또는 비 GNU
sed -n '/ /s//\n/;/\n/D;s/\.$//p'
/ /s//\n/
n
대신 ewline을 사용하세요/\n/D
ewline 까지 모두 삭제n
하고 처음부터 시작s/\.$//p
"."을 제거하면 줄 끝에 남은 내용이 인쇄됩니다.
답변2
마침표를 일치시키려면 이스케이프 처리하거나 대괄호로 묶어야 합니다. 초기 공백을 제외하려면 정규식에 전혀 추가하지 마세요. 단, 공백이 아닌 잘못된 문자 뒤에 있는 텍스트를 선택할 위험이 있습니다. 마지막으로 (0개 이상의 일치 항목) 뒤에 지정된 일치 항목을 사용하는 +
대신(즉, 최소 하나의 일치 항목)을 사용하는 경우 숫자 선택을 여러 번 포함할 필요가 없습니다 .*
array=nslookup -q=srv SOME_ADDRESS | grep -o '[a-z0-9.-]\+\.$'
위 정규식에서는 대문자와 밑줄이 제외됩니다. 필요한 경우 [:alnum:]
유효한 기호를 사용할 수 있습니다.
array=nslookup -q=srv SOME_ADDRESS | grep -o '[[:alnum:]_.-]\+\.$'