Есть ли grep-подобная утилита, которая позволит мне выполнять поиск grep с помощью логических операторов. Я хочу иметь возможность свободно вкладывать и комбинировать логические конструкции. Например, такие вещи должны быть возможны:
grep (term1 && term2) || (term1 && (term3 xor term4)) *
Я понимаю, что это можно сделать с помощью vanilla grep и дополнительных сценариев bash, но моя цель здесь - избежать этого.
-E
не совсем эквивалентно&&
из-за того, что он чувствителен к порядкуgrep foo | grep bar
это более общий способ сделать AND.Вы можете использовать Perl:
источник
Я верю, что это завершает то, что вы пытаетесь сделать. Он
d
выводит из вывода любую строку, которая не совпадаетterm1
,b
из сценария (и, таким образом, автоматически печатается) выходит любая строка, которая остается и совпадаетterm2
, а для строк, которые остаются, удаляет любую, которая не совпадает , и строку,term3
которая совпадает.term4
,sed
сценарии оцениваются по порядку, и все тесты являются логическими, поэтому любые действия, возникающие в результате теста, будут напрямую влиять на поведение любых следующих действий.источник
Я использую для цепочки
grep
команд для достижения логического И:Я считаю, что это довольно просто, Unix-как и элегантно.
Затем вы можете объединить (как подробно объяснил @Tushi) с
-E
опцией для OR-ing и-v
для отрицания.Ваш конкретный пример довольно неприятен и, вероятно, выиграет от более мощной утилиты (см. Ответ @ muru).
источник