grep for string like xxx12345

В развитие предыдущего ответа:

awk обрабатывает тесты истина/ложь численно; 0 - это "ложно", а любое другое число - "истинно". Восклицание (! ) меняет тест на противоположный.

Таким образом, !a[$1] по сути эквивалентно тому, чтобы сказать: "Выведите, если a[$1] равно 0".

0
31.01.2014, 00:43
3 ответа

Если ваш grep - это GNU grep , попробуйте параметр -o :

ps aux |grep foo| grep -o 'foo[0-9]\+'

Со страницы руководства GNU grep :

-o, --only-matching

Печатает только совпадающую часть строк.

Исходя из двух ваших требований (3 строчных буквы, за которыми следуют 5 цифр), это также должно работать:

ps aux | grep -o '[a-z]\{3\}[0-9]\{5\}'

Это более эффективно, поскольку при этом используется на одну трубу меньше.

1
29.04.2021, 00:43

Моим первым побуждением было бы использовать sed следующим образом:

ps aux | sed -n '/foo/s/.*\(foo[0-9]\{5\}\).*/\1/p'

Однако, поскольку данные будут структурированы в стандартное количество столбцов, вы можете вместо этого использовать cut:

ps aux | grep foo | cut -d ' ' -f 8
0
29.04.2021, 00:43

Если ваш grep не является GNU grep , вы всегда можете использовать Perl:

ps aux | perl -nle '/\s+([a-z]{3}[0-9]{5})\s+/ && print $1

или awk ], поскольку ваши поля уже разделены пробелами:

ps aux | awk '{ for(i=1;i<=NF;i++) if($i ~ /[a-z]{3}[0-9]{5}/) print $i }'
0
29.04.2021, 00:43

Теги

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