Bash 如何通过管道CLI返回信息来运行同一命令

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

我在这里完全是在理论上工作,所以请原谅任何误解。我需要在bash命令返回的每一行上运行相同的命令,但只使用该命令返回的一部分。请注意,这是自定义命令行返回。例如:

// 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!