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.