grep для пути в процессе (ps), содержащем число

#grep #centos

#grep #centos

Вопрос:

Я хотел бы использовать grep для пути процесса, у которого есть переменная. Пример — Это один из запущенных процессов.

/var/www/vhosts/rcsdfg/psd_folr/rcerr-m-deve-udf-172/bin/magt queue:consumers:start customer.import_proditns --single-thread --max-messages=1000

Я хотел бы выполнить grep для «psd_folr/rcerr-m-deve-udf-172 / bin / magt queue» из запущенных процессов. Проблема в том, что число 172 продолжает меняться, но это будет только трехзначное число. Пожалуйста, предложите, я пробовал ниже, но он не возвращает никаких выходных данных.

sudo ps axu | grep "psd_folr/rcerr-m-deve-udf-'^[0-9]$'/bin/magt queue"

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

1. Заменить '^[0-9]$' на [0-9]{3}

2. Нет, я все еще получаю пустой вывод. Но есть запущенные процессы.

Ответ №1:

Наиболее релевантным разделом вашего регулярного выражения является -'^[0-9]$'/ , в котором возникают следующие проблемы:

  • для grep апострофы не имеют синтаксического значения, отличного от чтения апострофа
  • курсор ^ соответствует началу строки, но в выходных данных ps в этом месте нет начала строки
  • доллар $ соответствует концу строки, но в выводе ps в этом месте нет конца строки
  • вы хотите прочитать 3 цифры, но [0-9] будет соответствовать только одной

Таким образом, часть вашего выражения должна быть изменена следующим образом, -[0-9] / чтобы соответствовать любому количеству цифр ( соответствует предыдущему символу любое количество раз, но хотя бы один раз) или подобным образом, -[0-9]{3}/ чтобы соответствовать ровно три раза ( {n} соответствует предыдущему символу ровно n раз).

Если вы изменяете свою команду, укажите grep флаг -E , чтобы она использовала расширенные регулярные выражения, в противном случае вам нужно избегать плюса или фигурных скобок:

 sudo ps axu | grep -E "psd_folr/rcerr-m-deve-udf-[0-9] /bin/magt queue"
  

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

1. Пожалуйста, добавьте описание к вашему ответу

2. @Cornholio, спасибо, это работает. И спасибо за объяснение.