Usa la formattazione dell'output ps:
ps -A -o pid
La formattazione dell'output del comando è l'opzione migliore. L'opzione o controlla la formattazione dell'output. Ho elencato alcuni degli argomenti di seguito, vedi 'man ps' per il resto ( per usare più sarebbe -o pid,cmd,flags
).
KEY LONG DESCRIPTION
c cmd simple name of executable
C pcpu cpu utilization
f flags flags as in long format F field
g pgrp process group ID
G tpgid controlling tty process group ID
j cutime cumulative user time
J cstime cumulative system time
k utime user time
o session session ID
p pid process ID
Awk o Cut sarebbe meglio ottenere colonne:
Generalmente non vorresti una regex per selezionare la prima colonna, vorresti reindirizzarla a cut o awk per ritagliare la prima colonna come:
ps ax | awk '{print $1}'
Regex è un'opzione, se non la migliore:
Se dovessi usare regex, potrebbe essere qualcosa del tipo:
ps ax | perl -nle 'print $1 if /^ *([0-9]+)/'
$1 stampa solo ciò che è stato abbinato tra parentesi. ^ ancora all'inizio della riga. L'asterisco spazio significa consentire caratteri spazio facoltativi prima del numero. [0-9]+ indica una o più cifre. Ma non consiglierei regex per questo particolare compito, vedi perché? :-)
ps ax | awk '{ print $1; }'
Usa -o switch per avere un output in formato personalizzato
ps -o pid
Il modo sbagliato di usare sed, come hai chiesto esplicitamente potrebbe essere
ps -ax | sed 's#^\( *[0-9]\+\) .*$#\1#'