Как распечатать tty столбец от PS через 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
Как заменить строки TTY с 'терминалом'?
ps
с sed
?ps | sed 's/ *[^ ]* *\([^ ]*\).*/\1/'
Я буду использовать ␣
для пробела.
s/A/B/
– s
замена A
B
одно время на строку␣*
– 0 или больше пробелов[^␣]*
– 0 или больше символов, которые не являются (^
) пространство\(…\)
– группа, все в завершенных скобках сохраняется как \1
поскольку это - первая группа здесь.*
– 0 или больше происшествий любого символа кроме новой строки\1
– звонит перед сохраненной группойps -o tt
ps | awk '{print $2}'
ps | sed '2,$s/\([^0-9 ][^ ]*\)/terminal/'
2,$
– обработайте каждую строку от второго до последнего (поэтому пропустите первую строку) – я предположил, что Вы хотите TTY
заголовок для пребывания, если не просто опускают это.[^0-9␣]
– любой символ кроме одного из них: 0123456789␣
terminal
– строка 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
имеет много опций - Вы не должны должны быть анализировать его для получения вывода, который Вы хотите (то же относится ко многим командам, но это особенно бесполезно с ps
потому что вывод, который Вы получаете, будет включать программу, анализирующую вывод...),
Если Вы действительно хотите к тому, хотя, можно проанализировать его для печати столбца TTY с sed
как это:
$ ps | sed -r 's/^ +[^ ]+ +([^ ]+) .*/\1/'
TTY
pts/4
pts/4
pts/4
-r
используйте расширенный regex s/old/new/
замена old
с new
^
запустите строки+
один или несколько из предшествующего символа ([^ ]+)
сохраните некоторые непробелы позже.*
любое количество любых символов\1
обратная ссылка на сохраненный шаблонМожно, вероятно, заменить pts текст как это:
$ 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:
замена old
с new
\?
нуль или один из предшествующего символа[0-9]*
нуль или больше цифр