我的文件中有以下内容。我想打印姓名下的 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
或者,将记录分隔符设置为“名称”:
perl -lne '$/="Name:"; /Address: ([\d\.]+)/ && print $1'
由于缺少g
它,因此仅匹配每个“记录”中的第一次。