내 파일에 다음 내용이 있습니다. 이름 아래에 IP 주소를 인쇄하고 싶습니다.
Server: 17.128.100.12
Address: 17.128.100.12#53
Name: Testserver1
Address: 17.146.118.156
Server: 17.128.100.12
Address: 17.128.100.12#53
Name: Testserver2
Address: 17.146.118.168
Server: 17.128.100.12
Address: 17.128.100.12#53
Name: Testserver3
Address: 17.146.118.166
출력은 다음과 같아야 합니다.
17.146.118.156
17.146.118.168
17.146.118.166
답변1
grep ^Address my_file | grep -v "#" | awk '{print $2}'
답변2
다음과 같이 사용할 수 있습니다 awk
.
awk 'BEGIN {firstName=0;} /Name/ {firstName=1;} /Address/ {if(firstName) {print $NF}; firstName=0;}' <file>
답변3
perl -0777 -e 'print join "\n", <> =~ m/Name.*?Address:\s*([\d.]+)/gms;'
여러 줄 정규 표현식을 사용하여 이름 바로 앞에 있는 "주소:" 뒤의 "숫자 및 점"을 일치시킵니다( .*?
탐욕적이지 않음).
읽을 매직 파일 핸들 <>
- STDIN 또는 지정된 파일을 읽습니다.
perl -0777 -e 'print join "\n", <> =~ m/Name.*?Address:\s*([\d.]+)/gms;' somefile
또는 레코드 구분 기호를 "name"으로 설정합니다.
perl -lne '$/="Name:"; /Address: ([\d\.]+)/ && print $1'
누락 되었으므로 g
각 "레코드"의 첫 번째 시간만 일치됩니다.