Как использовать результат регулярного выражения в другом выражении

С помощью GNU grep вы можете использовать параметр -Z , чтобы обнулить разделение имен файлов перед подключением к xargs :

egrep -lirZ 'déni|deni' /path/to/files/ | xargs -0 egrep -li 'arthur'
1
01.03.2019, 05:02
2 ответа

Для использования вывода одной команды в качестве аргумента второй команды может быть использован механизм подстановки команд $(). Например:

Вместо

$ 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

Заметьте, я также процитировал выражение полностью, читайте здесь почему вы должны это делать.

1
27.01.2020, 23:31

Используйте синтаксис $(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"
1
27.01.2020, 23:31

Теги

Похожие вопросы