Bash 如何通过管道CLI返回信息来运行同一命令
我在这里完全是在理论上工作,所以请原谅任何误解。我需要在bash命令返回的每一行上运行相同的命令,但只使用该命令返回的一部分。请注意,这是自定义命令行返回。例如:Bash 如何通过管道CLI返回信息来运行同一命令,bash,ssh,pipe,Bash,Ssh,Pipe,我在这里完全是在理论上工作,所以请原谅任何误解。我需要在bash命令返回的每一行上运行相同的命令,但只使用该命令返回的一部分。请注意,这是自定义命令行返回。例如: // initial command > ~$ device findAll // returned data Scanning ... Network Name Hardware Address IPV4 Address Details test1 CD:F8:D4:15:3B:AE
// initial command
> ~$ device findAll
// returned data
Scanning ...
Network Name Hardware Address IPV4 Address Details
test1 CD:F8:D4:15:3B:AE 172.1.3.22 "Blah Blah Blah"
test1 AB:C1:D2:11:31:EF 192.15.31.2 "Blah Blah Blah"
...
test1 CE:A8:B4:16:3A:FD 172.1.6.21 "Blah Blah Blah"
test1 AC:B1:E2:16:21:DF 172.1.6.22 "Blah Blah Blah"
Total: 600 Devices
有了这些返回的数据,我只需要访问每行的IPV4地址部分,这样我就可以通过ssh连接到设备并运行更新。我知道如何逐个ssh到每个设备中,但如果返回600个值,那将是浪费时间。我也不知道如何忽略返回数据的标题行和总行
我的问题是:如何仅使用命令行访问返回数据的IPV6部分
从理论上讲,最终结果可能是:
> ~$ device findall | while read -r line ; do
//access device by ssh command
scp /current-firmware-pathway/firmware.bin user@**[IPV4 Value Here]**:/tmp/fwupdate.bin
done
如果将返回值存储在一个变量中并对该变量进行迭代更有效,那么我也愿意看到这个结果。提前感谢您的帮助。使用awk非常简单:
device findall | awk '$3 ~ /^[0-9]+(\.[0-9]+){3}$/ { print $3 }' | while read ip; do
scp /current-firmware-pathway/firmware.bin user@$ip:/tmp/fwupdate.bin
done
使用$3~/^[0-9]+(\[0-9]+){3}$/
我们过滤行,
匹配由点分隔的4个非空数字序列。
严格来说,这不是IPv4地址的模式,
但可能已经足够近了。
如果有匹配项,我们将打印第3列。
标题行和摘要行被忽略,
因为它们与第3列中的IP地址模式不匹配。使用awk相当容易:
device findall | awk '$3 ~ /^[0-9]+(\.[0-9]+){3}$/ { print $3 }' | while read ip; do
scp /current-firmware-pathway/firmware.bin user@$ip:/tmp/fwupdate.bin
done
使用$3~/^[0-9]+(\[0-9]+){3}$/
我们过滤行,
匹配由点分隔的4个非空数字序列。
严格来说,这不是IPv4地址的模式,
但可能已经足够近了。
如果有匹配项,我们将打印第3列。
标题行和摘要行被忽略,
因为它们与第3列中的IP地址模式不匹配。您可以从命令输出中使用
awk
?您在哪个shell
中?你能粘贴设备findAll
的完整输出,包括当前的标题吗?我以前根本不知道awk命令。经过仔细研究,并考虑到我的外壳,我可以使用它。下面雅诺斯的回答很好,我想这就是你要去的地方。非常感谢。您能否从命令输出中使用awk
?您在哪个shell
中?你能粘贴设备findAll
的完整输出,包括当前的标题吗?我以前根本不知道awk命令。经过仔细研究,并考虑到我的外壳,我可以使用它。下面雅诺斯的回答很好,我想这就是你要去的地方。非常感谢。我以前根本不知道awk命令。经过仔细研究,并考虑到我的外壳,我可以使用它。非常感谢您的快速回复,Janos!我以前根本不知道awk命令。经过仔细研究,并考虑到我的外壳,我可以使用它。非常感谢您的快速回复,Janos!