Comment imprimer la colonne tty à partir de ps via sed?
PID TTY TIME CMD
13445 pts/7 00:00:00 bash
15286 pts/7 00:00:00 sort
15336 pts/7 00:00:00 sort
18896 pts/7 00:00:00 sed
19387 pts/7 00:00:00 ps
Comment remplacer les lignes de téléscripteur par "terminal"?
ps
avec sed
?ps | sed 's/ *[^ ]* *\([^ ]*\).*/\1/'
Je vais utiliser ␣
pour le caractère d'espace.
s/A/B/
- s
substituer A
par B
une fois par ligne␣*
- 0 ou plusieurs espaces[^␣]*
- 0 ou plusieurs caractères qui sont pas (^
) un espace\(…\)
- un groupe, tout ce qui se trouve entre les crochets d'échappement est enregistré en tant que \1
car c'est le premier groupe ici.*
- 0 ou plusieurs occurrences de n'importe quel caractère sauf newline\1
- appelle le groupe précédemment enregistréps -o tt
ps | awk '{print $2}'
ps | sed '2,$s/\([^0-9 ][^ ]*\)/terminal/'
2,$
- Traite chaque ligne de la seconde à la dernière (laissez donc la première ligne en retrait) - J'ai supposé que vous souhaitiez que la rubrique TTY
reste, sinon omettez-la.[^0-9␣]
- tout caractère sauf un de ceux-ci: 0123456789␣
terminal
- la chaîne terminal
ps | sed '2,$s/\([0-9 ]*\)[^ ]*/\1terminal/'
ps | awk '{$2="terminal";print}' # change every line
ps | awk '{if(NR>1){$2="terminal"};print}' # omit first line
ps
a beaucoup d'options - vous ne devriez pas avoir besoin de l'analyser pour obtenir le résultat souhaité (il en va de même pour de nombreuses commandes, mais cela est particulièrement inutile avec ps
, car le résultat obtenu inclura le programme analyse la sortie ...)
Si vous voulez vraiment, vous pouvez l’analyser pour imprimer la colonne TTY avec sed
comme ceci:
$ ps | sed -r 's/^ +[^ ]+ +([^ ]+) .*/\1/'
TTY
pts/4
pts/4
pts/4
-r
utilise une expression rationnelle étendues/old/new/
remplace old
par new
^
début de ligne+
un ou plusieurs des caractères précédents([^ ]+)
enregistrer des caractères non-espace plus tard.*
un nombre quelconque de caractères\1
référence arrière au motif enregistréVous pouvez probablement remplacer le texte pts comme ceci:
$ ps | sed 's:pts/\?[0-9]*:terminal:'
PID TTY TIME CMD
3379 terminal 00:00:00 bash
3466 terminal 00:00:00 ps
3467 terminal 00:00:00 sed
s:old:new:
remplace old
par new
\?
zéro ou un des caractères précédents[0-9]*
zéro ou plusieurs chiffres