#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, спасибо, это работает. И спасибо за объяснение.