linux - BASH:grep/awk/sed 提取变量数据

标签 linux bash awk sed grep

更新 我需要澄清的是,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/

相关文章:

android - 无法为 Android 编译 LKM

linux - 反病毒开发入门

bash - xrandr 大小 1920x1080 在可用模式 ubuntu 中找不到

bash - Linux/庆典 : remove text between two chars

bash - 使用 awk 解析配置文件

bash - 从文件中的行中提取特定字符串并输出到另一个文件并进行修改

python - 为什么向上和向下箭头命令在 Python 命令行解释器中不起作用?

linux - 从 Linux shell 将多个目录复制到另一个多个目录

linux - 将变量赋值给 if 语句中的变量

bash/sed,以相同的缩进级别替换文件中的行