我有两个正则表达式,即 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"