1. Como imprimir a coluna tty de ps com sed ?
ps | sed 's/ *[^ ]* *\([^ ]*\).*//'
Explicações
Usarei ␣ para o caractere de espaço.
-
s/A/B/-substituteAporBuma vez por linha -
␣*- 0 ou mais espaços -
[^␣]*- 0 ou mais caracteres que não são (^) um espaço -
\(…\)- um grupo, tudo dentro dos colchetes com escape é salvo como, pois é o primeiro grupo aqui -
.*- 0 ou mais ocorrências de qualquer caractere, exceto nova linha -
- chama o grupo antes de salvo
Formas alternativas
ps -o tt
ps | awk '{print $2}'
2. Como substituir a linha TTY por “terminal”?
ps | sed '2,$s/\([^0-9 ][^ ]*\)/terminal/'
Explicações
-
2,$- processa cada linha do segundo para o último (então, deixe a primeira linha de fora) - Eu assumi que você quer que o títuloTTYpermaneça, se não omitir isso. -
[^0-9␣]- qualquer caractere, exceto um destes:0123456789␣ -
terminal- a stringterminal
Forma alternativa
ps | sed '2,$s/\([0-9 ]*\)[^ ]*/terminal/'
ps | awk '{$2="terminal";print}' # change every line
ps | awk '{if(NR>1){$2="terminal"};print}' # omit first line