Extrai um número de uma coluna com o Bash

1

Eu preciso extrair apenas o número bash script_c.sh process 'desta saída:

11545 pts/3    S+     0:00 bash script_c.sh
11625 pts/3    S+     0:00 grep script_c.sh

neste caso, será: 11545

Eu tentei

PROCESS=$(ps ax | grep 'bash script_c.sh' | cut -d' ' -f1 | tr -d ' ' | sed '/^$/d')

Depois disso eu tenho que matá-lo usando kill $PROCESS , mas não funciona bem, ele diz: "deve ser um pid de um trabalho etc ...".

    
por Frank 03.02.2013 / 12:39

2 respostas

2

A ferramenta clássica para extrair colunas é cut .

pgrep -fl 'bash script_c.sh' | cut -f1 -d" "

extrairá a primeira coluna, separada por caracteres de espaço simples. Deve realmente fazer o que você queria. O truque maior, porém, foi que eu usei pgrep , que tem uma saída muito melhor. Se eu não tivesse adicionado a opção -l , não haveria necessidade de cut :

pgrep -f 'bash script_c.sh'

No entanto, para sua tarefa específica, você pode querer usar apenas pkill .

Permite matar processos por um padrão, por exemplo

pkill -f "script_c.sh"

O grande benefício é que pgrep e pkill estão cientes de si mesmos e só produzirão / eliminarão outros processos outros . Em seu exemplo acima, você terá falsos positivos, como o comando grep , por exemplo. Portanto, use apenas pkill , que deve estar disponível em qualquer sistema Linux / BSD moderno.

Se você realmente quiser usar ps (o que não recomendo):

 ps ax | grep script_c.sh | grep -v grep | sed -e 's/^ *\([0-9]*\) .*//'

ou melhor ainda com o awk (que é melhor analisar automaticamente o layout da coluna do ps):

  ps ax | awk '!/awk/ && /script_c.sh/ { print $1 }'

Observe que, para ambos, você precisa se certificar de que não corresponde a si mesmo, por exemplo, excluir grep e awk da correspondência. Então, usar pgrep é substancialmente mais simples. Tanto pgrep como pkill são as ferramentas certas para o seu problema real.

    
por 03.02.2013 / 12:49
0

Tente isto:

PROCESS=$(ps ax | grep 'bash script_c.sh' | sed 's/\([0-9]*\).*//')
    
por 03.02.2013 / 12:47

Tags