Я хочу извлечь строки, которые соответствуют следующей логической операции:

"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) Как раскрасить полные выводы команды?

1 ответ1

0

Использование опции -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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .