更新 我需要澄清的是,Jon8RFC-LT 和 DOMAIN 也只是动态内容的一般示例,例如 IP 地址和 MAC 地址; nmblookup 根据 ip 地址检索和显示完全动态的内容。如果使用 awk,我需要有办法从 nmblookup 中提取 4 个动态值:IP、主机名/ Assets 名称、域名、MAC 地址。抱歉造成混淆,我更新了代码以使其更清楚。
几天来我一直在搜索和使用我的 Linux 书籍,但找不到我需要的 awk/gawk/grep/egrep/sed(我想我需要其中的一个或多个,优雅)。在 bash 脚本中,我正在运行:
su_nmblookup=$(nmblookup -A $ipaddress)
返回
WARNING: The "idmap backend" option is deprecated added interface eth0 ip=a07d::a07d:a07d:a07d:a07d%eth0 bcast=b57d::ffff:ffff:ffff:ffff%eth0 netmask=ffff:ffff:ffff:ffff:: added interface eth1 ip=b57d::b57d:b57d:b57d:b57d%eth1 bcast=a07d::ffff:ffff:ffff:ffff%eth1 netmask=ffff:ffff:ffff:ffff:: added interface eth0 ip=234.234.234.234 bcast=12.12.12.12 netmask=255.255.0.0 Socket opened. Looking up status of 123.123.123.123 JON8RFC-LT <00> - B <ACTIVE> DOMAIN <00> - <GROUP> B <ACTIVE> JON8RFC-LT <20> - B <ACTIVE> DOMAIN <1e> - <GROUP> B <ACTIVE> MAC Address = 4F-A2-4F-A2-4F-A2
我做过的最好的事情就是用这段代码把它砍下来:
display=${su_nmblookup/#*Looking/\Looking}
Looking up status of 123.123.123.123 JON8RFC-LT <00> - B <ACTIVE> DOMAIN <00> - <GROUP> B <ACTIVE> JON8RFC-LT <20> - B <ACTIVE> DOMAIN <1e> - <GROUP> B <ACTIVE> MAC Address = 4F-A2-4F-A2-4F-A2
但是,我想知道的是如何返回这些清理过的格式中的任何一种。我想了解 grep/awk/sed 如何通过这两个示例提取数据,一个示例保留格式,一个示例仅换行。由于格式和 gt/lt 符号,我什至在这里让引用/编码正常工作真是太糟糕了!
Looking up status of 123.123.123.123 JON8RFC-LT DOMAIN 4F-A2-4F-A2-4F-A2
或者,简单地
JON8RFC-LT DOMAIN 123.123.123.123 4F-A2-4F-A2-4F-A2
感谢您的帮助!
最佳答案
假设 nmblookup -A 123.123.123.123
的输出被重定向到文件 input.txt
awk '/Looking up status of/ {print} /JON8RFC-LT/ {if(a!=1){print "\t"$1;a=1}} /DOMAIN/ {if(b!=1){print "\t"$1;b=1}} /MAC Address/ {print "\t"$4}' input.txt
已更新,因为 Etan Reisner 建议缩短:
awk '/Looking up status of/ {print} /JON8RFC-LT/ && !a {print "\t"$1;a=1} /DOMAIN/ && !b {print "\t"$1;b=1} /MAC Address/ {print "\t"$4}' input.txt
输出:
Looking up status of 123.123.123.123
JON8RFC-LT
DOMAIN
4F-A2-4F-A2-4F-A2
针对动态内容更新
awk '/Looking up status of/,/MAC Address/ {print; getline;print "\t"$1;getline;print "\t"$1;getline;getline;getline;getline;print "\t"$4;exit 0}' input.txt
假设在 Looking up ...
行之后的两行你想要第一个词。然后忽略三行,然后打印 MAC 地址。
关于linux - BASH:grep/awk/sed 提取变量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23347214/