Как объединить следующие две команды grep

#linux #grep

Вопрос:

Как объединить следующие две команды grep,

 echo $(pci -nd ${vendor_id1}: | grep -oc ${dev_id1})
echo $(pci -nd ${vendor_id1}: | grep -oc ${dev_id2})
 

до сих пор пробовал ниже, но не сработало,

 echo $(pci -nd ${vendor_id1}: | grep -oc ${dev_id1}|${dev_id2})
echo $(pci -nd ${vendor_id1}: | grep -oc ${dev_id1}|${dev_id2})
 

Комментарии:

1. Похоже , вы хотите посчитать совпадения $dev_id1 , и $dev_id2 , если echo $(pci -nd ${vendor_id1}: | grep -oc "${dev_id1}\|${dev_id2}" это не сработает, попробуйте echo $(pci -nd ${vendor_id1}: | grep -Eoc "${dev_id1}|${dev_id2}" , иначе grep, который вы используете, сломан.

2. Добро пожаловать в SO, пожалуйста, добавьте свои примеры ввода и ожидаемых результатов в свой вопрос, чтобы сделать его более понятным.

Ответ №1:

Вы можете использовать

 echo $(pci -nd ${vendor_id1}: | grep -Eoc "${dev_id1}|${dev_id2}"
 

-E опция позволяет использовать синтаксис POSIX ERE, который поддерживает unescaped | в качестве оператора чередования.

Обратите внимание на двойные кавычки вокруг строки регулярного выражения, это позволяет расширять переменные.