Используя -P
опцию (PCRE):
grep -P 'AB\+CD,(?:nonAB\+nonCD|nonAB\+CD)' file.txt
Выход:
AB+CD,nonAB+nonCD AB+CD,nonAB+CD AB+CD,nonAB+nonCD,nonAB+CD
Я хочу извлечь строки, которые соответствуют следующей логической операции:
"AB+CD" AND ("nonAB+nonCD" OR "nonAB+CD").
Это означает, что я хочу строки с:
AB+CD,nonAB+nonCD AB+CD,nonAB+CD AB+CD,nonAB+nonCD,nonAB+CD
Это означает, что я ищу строки с "AB + CD" с одним или обоими ("nonAB + nonCD" ИЛИ "nonAB + CD").
Обратите внимание, что + является частью строки. Я хочу рассматривать это как строку (символ), а не арифметическую операцию.
Я использовал pipe для выполнения AND. И использовать \ | для операционной. Итак, моя команда:
grep ',AB+CD' test.txt | grep ',nonAB+nonCD\|,nonAB+CD'
Первый |
для труб. Вторым является логическое ИЛИ для grep согласно этой ссылке, которая дает этот пример для логического ИЛИ с grep:
grep 'pattern1\|pattern2' filename
Результат, который мне представляется в терминале, окрашивает (находит) вторую часть команды. Первая часть (до того, как труба |
не выделена в цветном результате. Мой вопрос:
1) Правильна ли моя команда?
2) Как раскрасить полные выводы команды?
Используя -P
опцию (PCRE):
grep -P 'AB\+CD,(?:nonAB\+nonCD|nonAB\+CD)' file.txt
Выход:
AB+CD,nonAB+nonCD AB+CD,nonAB+CD AB+CD,nonAB+nonCD,nonAB+CD