совпадение регулярного выражения с awk - PullRequest
1 голос
/ 17 октября 2011

Я немного повозился с awk, и я все еще новичок в bash / awk, поэтому терпите меня

, когда я делаю это, чтобы найти все процессы, работающие от имени root

ps aux | awk '$0 ~ /.*root*./ {print $0, $11}'

он распечатывает все, как я ожидал, но также печатает строку внизу, которая включает МОЕ имя пользователя (не root) и процесс awk.Это почему?Что я могу с этим поделать?

Примечание. Меня не очень интересуют альтернативные решения для распечатки всех процессов, имеющих root.Я уже могу это сделать.Я хочу понять, что здесь происходит и как я могу это использовать.

Ответы [ 5 ]

2 голосов
/ 17 октября 2011

Способ избежать печати процесса awk таков:

ps aux | awk '/[r]oot/ {print $0,$11}'

Этот хак работает так: awk будет искать последовательность символов 'r' 'o' 'o' 't'. Фактический процесс awk не соответствует, потому что вывод ps содержит последовательность символов '[' 'r' ']' 'o' 'o' 't'.

1 голос
/ 17 октября 2011

это то, что вы хотите?

ps aux | awk '$0 ~ /^root/ {print $0, $11}'

причина, по которой у вас есть "последняя строка", заключается в том, что ваше регулярное выражение было. root. .и ваша строка ps | awk содержит ту же строку.так что это выбрано.

возможно, вы можете с помощью grep -v "awk" отфильтровать вашу строку awk.

1 голос
/ 17 октября 2011

Чтобы точно соответствовать первому полю, которое вы пишете

ps aux | awk '$1 == "root"' { print $0, $11 }'

Вы также можете попросить ps отфильтровать для вас

ps -Uroot | awk ' { print $5 } '
1 голос
/ 17 октября 2011

Кажется, есть пара проблем: во-первых, у вас есть *. вместо. * после "root". Другое - вы ищете всю строку, а не только столбец, содержащий имя пользователя.

$ 0 представляет всю строку. $ 1 представляет первый столбец.

Что-то ближе к тому, что вы хотите, будет

ps aux | awk '$1 ~ /.*root.*/ {print $0, $11}'

но вы могли бы просто сделать

ps aux | awk '$1=="root" {print $0, $11}'
0 голосов
/ 17 октября 2011

Если вам нужно сопоставить только процесс, принадлежащий root (т.е. записи, начинающиеся со строки root ):

ps aux | awk '/^root/ { print $0, $11 }'

Обратите внимание, что /regex/ и$0 ~ /regex/ эквивалентны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...