С помощью GNU grep вы можете использовать параметр -Z
, чтобы обнулить разделение имен файлов перед подключением к xargs
:
egrep -lirZ 'déni|deni' /path/to/files/ | xargs -0 egrep -li 'arthur'
Для использования вывода одной команды в качестве аргумента второй команды может быть использован механизм подстановки команд $()
. Например:
Вместо
$ 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
Заметьте, я также процитировал выражение полностью, читайте здесь почему вы должны это делать.
Используйте синтаксис $(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"