awk
IP가 다음과 같이 bash stdin에서 수신된 변수라고 가정하고 를 사용하여 마지막 IP 옥텟을 반복할 수 있는지 궁금합니다.
#!/bin/bash
read IP
awk -v IP="${IP}" 'BEGIN{FS="."} {for (i=1; i<=251; i++) { print $1 $2 $3 i } }'
출력은 다음과 유사합니다.
192.168.1.1
192.168.1.2
....
192.168.1.251
이것은 작동하지 않지만 아이디어를 얻으시기 바랍니다.
답변1
printf '192.168.1.%d\n' {1..251}
이는 중괄호 확장 bash
(원래 zsh
에서도 사용 가능한 기능 ksh93
)을 사용하여 1에서 251 사이의 숫자를 생성하고 각 숫자에 대해 printf
끝에 숫자가 삽입된 IP 주소가 인쇄됩니다.
다음 코드는 IP 주소를 읽고 동일한 작업을 수행합니다.
IFS='.' read a1 a2 a3 a4
printf -- "$a1.$a2.$a3.%d\n" {1..251}
사용하고 싶은 경우 awk
:
awk 'BEGIN { OFS = FS = "." } { for (i = 1; i <= 251; ++i) print $1, $2, $3, i }' <<<"$IP"
입력 및 출력 필드 구분 기호가 모두 점으로 표시되기를 원하므로 FS
블록 OFS
의 해당 문자 에 및 를 설정합니다 BEGIN
. 그런 다음 표준 입력에서 IP 주소를 읽고 각 IP 주소에 대해 1부터 251까지 반복하여 목록을 인쇄합니다.
명령줄에서 $IP
"here-string"(원래는 의 기능 이지만 및 zsh
에서도 사용 가능 )으로 입력합니다.bash
ksh93