grep para string como xxx12345

0

Eu tenho 64 processos em execução que possuem a seguinte string

pbs_mom -m -M 1234 -R 5678 -A foo12345 -c /var/spool/torque/mom_priv/login_config 

Eu preciso pesquisar e extrair apenas foo12345

  • sempre começa com três letras minúsculas
  • seguido por 5 dígitos

Aqui está o que estou tentando, mas estou obtendo a linha inteira em troca

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

Como posso remover todo o texto, exceto foo12345?

    
por spuder 30.01.2014 / 23:43

3 respostas

1

Se o seu grep for GNU grep , tente a opção -o :

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

Da página man do GNU grep :

-o, --only-matching

Prints only the matching part of the lines.

Com base em seus dois requisitos (três letras minúsculas seguidas de cinco dígitos), isso também deve funcionar:

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

Isso é mais eficiente, pois usa um tubo a menos.

    
por 30.01.2014 / 23:51
0

Meu primeiro instinto seria usar sed assim:

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

No entanto, como os dados serão estruturados em um número padrão de colunas, você poderá usar o recorte:

ps aux | grep foo | cut -d ' ' -f 8
    
por 31.01.2014 / 00:00
0

Se o seu grep não é o GNU grep , você sempre pode usar o Perl:

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

ou awk , pois seus campos já estão separados por espaços:

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

Tags