Oto kod, który chcę rozszyfrować:

w | cut -d " " -f 1 - | grep -v USER | sort -u 

Odpowiedź

w | cut -d " " -f 1 - | grep -v USER | sort -u 

Polecenie w wyświetla zalogowanych użytkowników wraz z kilka dodatkowych informacji:

$ w 12:59:25 up 50 days, 21:45, 4 users, load average: 1.02, 1.03, 1.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT bill pts/12 xxx.xxx.xxx.xxx 12:55 0.00s 0.03s 0.03s tmux bill pts/14 tmux(64415).%0 12:55 0.00s 0.05s 0.03s w dave pts/18 yyy.yyy.yyy.yyy Wed09 23:52m 1:15 1:07 vim clear_snapshots.pl dave pts/2 yyy.yyy.yyy.yyy Tue14 23:48m 3.65s 3.65s -bash 

Polecenie cut -d " " -f 1 - wyodrębnia pierwszą kolumnę oddzieloną spacjami (- na końcu można usunąć):

$ w | cut -d " " -f 1 USER bill bill dave dave 

grep -v USER usuwa wszystkie wiersze zawierające ciąg USER:

$ w | cut -d " " -f 1 | grep -v USER bill bill dave dave 

sort -u sortuje swoje dane wejściowe leksykograficznie i usuwa zduplikowane wiersze:

$ w | cut -d " " -f 1 | grep -v USER | sort -u bill dave 

Domyślam się, że próbuje wyświetlić nazwy użytkowników, którzy są aktualnie zalogowani , jako posortowaną listę.

Prostszym sposobem jest użycie polecenia users. users wyświetli wszystkich zalogowanych użytkowników w jednym wierszu, ale można to przesłać przez tr " " "\n" i sort -u, aby uzyskać jednego użytkownika w każdym wierszu:

users | tr " " "\n" | sort -u 

To dodatkowo nie zależy od formatu wygenerowanego przez w (czas w pierwszym wierszu wyniku w może, ale nie musi, być częścią wyniku potoku, w zależności od tego, czy bieżąca godzina ma jedną, czy dwie cyfry, w zależności jakiej implementacji w „używasz).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *