Grep 'ИЛИ' regex проблема

Для меня, на более или менее текущей дуге система Linux, ps xf показывает мне только процессы, принадлежавшие моему идентификатору пользователя. htop показывает мне все процессы. Попробовать ps -ef для списка всех процессов, или возможно ps -ejH получить дочерний/родительский список отношений.

66
30.09.2011, 15:57
2 ответа

С нормальным regex, символами (, | и ) потребность, которой оставят. Таким образом, необходимо использовать

$ grep "^ID.*\(ETS\|FBS\)" my_file.txt

Вам не нужны Escape при использовании расширенного regex (-E) опция. Посмотрите man grep, раздел"Basic vs Extended Regular Expressions".

94
27.01.2020, 19:31
  • 1
    Можно также использовать egrep вместо grep -E. –  Riccardo Murri 30.09.2011, 16:19
  • 2
    @RiccardoMurri ответ Michal указывает, что egrep (и fgrep) удерживаются от использования (даже при том, что они могли бы все еще работать). –  Timo 09.12.2017, 11:44

Если Вы хотите использовать несколько ответвлений ( | как or), затем чтобы быть более совместимым, это лучше к явному, говорят, что Вы хотите использовать "современное РЕ" иначе. ДО.

Для этого используйте grep-E:

grep -E "^ID.*(ETS|FBS)" my_file.txt

Для получения дополнительной информации о РЕ ДО и целая "современная" история ER, посмотрите man 7 regex.

Кроме того, можно использовать egrep вместо grep, но поскольку можно читать из man grep:

egrep совпадает с grep-E. fgrep, совпадает с grep-F

(...)

Прямой вызов или как egrep или как fgrep удерживается от использования

27
27.01.2020, 19:31
  • 1
    В то время как прямой вызов egrep удерживается от использования, он будет работать в большинстве *, отклоняют варианты. –  Mark D 30.09.2011, 17:41

Теги

Похожие вопросы