2016-05-25 2 views
2

я могу использоватьпроцессов Bash/Python соответствие

pgrep -f 'keyword1 | keyword2' 

запустить pgrep и вернуть все процессы, которые соответствуют либо ключевому слову.

Как я могу использовать &, чтобы сделать это вместо этого? Я просто хочу, процессы, которые содержат как ключевые слова

следующие модели неуспешно:

pgrep -f 'keyword1 & keyword2' 
pgrep -f 'keyword2 && keyword2' 

MAN pgrep (1)

ВАРИАНТЫ

-f Узор обычно только сопоставляться процесс имя. Когда -f задано, используется полная командная строка.

.

Вопрос на стороне: Есть ли встроенная библиотека Python для выполнения этих команд? Кажется, я не нашел одного, и все предложили использовать subprocess.Popen(), так как я запускаю команду pgrep, однако я бы предпочел чистое решение Python, если оно доступно

+0

Вы слышали о модуле 're'? –

+0

У меня действительно есть. Это для регулярных выражений? Будет ли команда bash отображать регулярное выражение Python, если я запускаю его через subprocess.Popen ('pgrep [re]')? – AK47

+0

Что вы хотите вернуть, список pids? –

ответ

1

Вы можете использовать или с подстановочными реверсированиями шаблона, чтобы получить либо ключевое слово в любом порядке.

pgrep -f 'keyword1.*keyword2|keyword2.*keyword1' 
+1

pgrep -f для расширенного поиска – AK47

0

Типичный способ сделать grep 'и' должен grep несколько раз. Поскольку pgrep возвращает pids вы должны фильтровать список процессов непосредственно, а затем извлечь PID:

ps ax -o pid,cmd | grep 'keyword1' | grep 'keyword2' | awk '{print $2}' 
+1

Ваш код может быть упрощен до 'ps aux | awk '/ [k] eyword1/&&/keyword2/{print $ 2}' 'Но все равно будет давать ложные положительные значения, так как столбцы user, pid, cpu, mem, ... также могут быть сопоставлены. – andlrc

+0

@andlrc Я не знаю 'awk', я не планирую изучать еще один странный язык оболочки, для которого у меня мало пользы, и я не удивлюсь, если другие почувствуют то же самое. Это просто хороший способ извлечь столбец. Множественный шаблон grep прост для понимания и может применяться в ситуациях, когда 'awk' вообще не требуется. –

+1

Вот как вы на это смотрите. Я бы сказал, что grep совсем не нужен. Но если вы подойдете к своей точке, вы можете подумать об изменении части awk с помощью 'tr -s '' | cut -d '' -f2';) – andlrc

4

Я не уверен, что вы можете сделать это с помощью pgrep вы можете однако использовать AWK:

ps ax -o pid,cmd | awk '{pid = $1; $1=""}/[k]eyword1/ && /keyword2/ {print pid}' 

Причина, по которой я использую [k]eyword1, заключается в том, чтобы избежать совпадения процесса awk.

Если PCRE поддерживается pgrep что-то подобное будет работать:

pgrep -f '(?=.*keyword1)(?=.*keyword2)' 
Смежные вопросы