Olá Alexandre, obrigado pela resposta, mas a posição pode ser variável, nem sempre será a 9ª coluna, pois o campo correspondente à data pode mudar, veja:
root 28051 1 0 15:11:59 ? 0:00 sh /util/shell/suporte_001.sh arg01 arg02 root 28051 1 0 Nov 16 ? 0:00 sh /util/shell/suporte_001.sh arg01 arg02 Desta forma o nome do processo passa para o 10º campo. Eu já havia pensado no awk, porém o nome do shell não tem posição definida, pode ser tanto na 9ª quanto na 10ª posição. Rodrigo -----Mensagem original----- De: Alexandre Mulatinho [mailto:[EMAIL PROTECTED] Enviada em: sexta-feira, 16 de novembro de 2007 12:05 Para: [email protected] Cc: Info Suporte - Rodrigo Nery Assunto: Re: [shell-script] Comando sed para obter somente nome do shell sem os argumentos Em 16/11/07, Info Suporte - Rodrigo Nery <[EMAIL PROTECTED]> escreveu: Olá pessoal, Estou montando uma expressão regular, porém a mesma não está funcionando a contento. Vejam os exemplos abaixo da saída do comando "ps": root 28051 1 0 15:11:59 ? 0:00 sh /util/shell/suporte_001.sh arg01 arg02 user1 6075 6074 0 11:01:00 ? 0:00 /usr/bin/sh /util/shell/suporte_002.sh user2 6075 6074 0 11:01:00 ? 0:00 /bin/sh /util/shell/suporte_003.sh 001 002 003 Preciso obter o nome do shell que está rodando, para isso tenho direciono o comando "ps -ef | grep <nome do shell> | grep -v grep" para um arquivo temporário e executo os comandos "sed" abaixo: cat /tmp/temp01 | sed 's;^.* \(/.*\) [A-Za-z0-9].*$;\1;g' | sed 's;^.* \(/.*\)$;\1;g' A saída é: /util/shell/suporte_001.sh arg01 /util/shell/suporte_002.sh /util/shell/suporte_003.sh 001 002 E deveria ser: /util/shell/suporte_001.sh /util/shell/suporte_002.sh /util/shell/suporte_003.sh O que posso fazer para obter a saída desejada (somente o nome do shell, eliminando todos os argumentos, se houver)? Obrigado a todos! Rodrigo Fala Rodrigo, Você pode tentar utilizar o AWK pra isso, ele tem uma boa forma de delimitar campos e reduziria o código em apenas uma linha, você precisa pegar todas as entradas que tiverem como 6o argumento uma palavra que contenha 'suporte': $ ps ax | grep suport | awk '{ print $6; }' /util/shell/suporte_001.sh /util/shell/suporte_002.sh /util/shell/suporte_003.sh com o SED: $ ps ax | grep sh | sed -e 's/.*\?[0-9]:[0-9][0-9] \?.*.\? //' -- "KISS (Keep It Simple Stupid!), Slackware Linux." ;) Alexandre Mulatinho <crudovisk 'at' gmail.com> Programmer and System Administrator
