如何使用正则表达式结果到另一个表达式中

如何使用正则表达式结果到另一个表达式中

我有两个正则表达式,即 command1 和 command2,我需要将两个表达式组合成一个表达式,用于|该 command1 输出应传递给下一个表达式。

命令1:

grep 0x017a /sys/bus/pci/devices/*/device | cut -d/ -f6
>> Output : 00:00:01

命令2:

head -n1 /sys/bus/pci/devices/00:00:01/resource | cut -d ' ' -f 1 | tail -c 9

如何使用 command1 输出 (00:00:01) 到 command2 中并组合成单个表达式?

答案1

使用一个命令的输出作为第二个命令的参数的机制命令替换 $()可以利用。例如:

代替

$ whoami
jimmij

$ ls /home/jimmij/tmp
file1 file2

你可以做

$ ls /home/"$(whoami)"/tmp
file file2

在您的具体情况下,单个命令变为

head -n1 "/sys/bus/pci/devices/$(grep 0x017a /sys/bus/pci/devices/*/device | cut -d/ -f6)/resource" | cut -d ' ' -f 1 | tail -c 9

请注意,我还引用了整个表达式,在这里读为什么你应该这样做。

答案2

使用$(command)语法(或旧`command`语法)。

DEVICE=$(grep 0x017a /sys/bus/pci/devices/*/device | cut -d/ -f6)
head -n1 "/sys/bus/pci/devices/$DEVICE/resource" | cut -d ' ' -f 1 | tail -c 9

哦。 “组合成一个表达式”类似。

DEVICE=$(grep 0x017a /sys/bus/pci/devices/*/device | cut -d/ -f6)
OUTPUT=$(head -n1 "/sys/bus/pci/devices/$DEVICE/resource" | cut -d ' ' -f 1 | tail -c 9)

echo "Output is $OUTPUT"

相关内容