입력 데이터에는 다음 행이 포함됩니다.
Network: 10.1.0.0/24 00001010.00000001.00000000. 00000000
Network: 10.1.1.0/24 00001010.00000001.00000001. 00000000
Network: 10.1.2.0/24 00001010.00000001.00000010. 00000000
Network: 10.1.3.0/24 00001010.00000001.00000011. 00000000
Network: 10.1.4.0/24 00001010.00000001.00000100. 00000000
Network: 10.1.5.0/24 00001010.00000001.00000101. 00000000
Network: 10.1.6.0/24 00001010.00000001.00000110. 00000000
Network: 10.1.7.0/24 00001010.00000001.00000111. 00000000
$2 열의 출력을 얻기 위해 awk를 사용하고 싶습니다. 내가 시도한 것은 아무것도 반환하지 않습니다.
$ ipcalc 10.1.1.0/21 /24|gawk '$1~/^Network:.+\/24[[:space:]]+/{print $2}'
grep과 함께 정규식을 사용하면 제대로 작동합니다.
$ ipcalc 10.1.1.0/21 /24|grep -E "^Network:.+\/24[[:space:]]+"
Network: 10.1.0.0/24 00001010.00000001.00000000. 00000000
Network: 10.1.1.0/24 00001010.00000001.00000001. 00000000
Network: 10.1.2.0/24 00001010.00000001.00000010. 00000000
Network: 10.1.3.0/24 00001010.00000001.00000011. 00000000
Network: 10.1.4.0/24 00001010.00000001.00000100. 00000000
Network: 10.1.5.0/24 00001010.00000001.00000101. 00000000
Network: 10.1.6.0/24 00001010.00000001.00000110. 00000000
Network: 10.1.7.0/24 00001010.00000001.00000111. 00000000
awk(gawk) 다른 해결 방법이 필요합니까?
답변1
grep 명령을 에뮬레이트하려면 다음 $1~
과 같이 변경 $0~
하거나 제거하세요.
awk '/^Network:.+\/24[[:space:]]+/{print $2}'
또는 더 강력하고 이식 가능하게 만들려면 (POSIX awks뿐만 아니라 모든 awk에서 작동):
awk '($1 == "Network:") && ($2 ~ "/24$"){print $2}'
$1
코드의 문제는 전체 표현식을 테스트 하지만 $1
첫 번째 필드인 Network:
.
답변2
보여준 예를 사용하여 다음 GNU grep
솔루션을 시도해 보십시오. 표시된 예제만 사용하여 작성하고 테스트했습니다.
grep -oP '^Network:\s+\K([0-9]{1,3}\.){3}[0-9]{1,3}\/24' Input_file