-3 grep shell-script sort cut w
这是我想要破译的代码:
w | cut -d " " -f 1 - | grep -v USER | sort -u
Run Code Online (Sandbox Code Playgroud)
w | cut -d " " -f 1 - | grep -v USER | sort -u
Run Code Online (Sandbox Code Playgroud)
该w
命令显示已登录的用户以及一些附加信息:
$ 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
Run Code Online (Sandbox Code Playgroud)
该cut -d " " -f 1 -
命令提取 this 的第一个以空格分隔的列(-
末尾的可以删除):
$ w | cut -d " " -f 1
USER
bill
bill
dave
dave
Run Code Online (Sandbox Code Playgroud)
grep -v USER
删除所有包含字符串的行USER
:
$ w | cut -d " " -f 1 | grep -v USER
bill
bill
dave
dave
Run Code Online (Sandbox Code Playgroud)
sort -u
按字典顺序对其输入进行排序,并删除重复的行:
$ w | cut -d " " -f 1 | grep -v USER | sort -u
bill
dave
Run Code Online (Sandbox Code Playgroud)
我的猜测是它尝试将当前登录的用户的用户名作为排序列表列出。
一种更简单的方法是使用users
命令。users
将在一行中输出所有登录的用户,但您可以通过管道将其输出tr ' ' '\n'
并sort -u
每行获取一个用户:
users | tr ' ' '\n' | sort -u
Run Code Online (Sandbox Code Playgroud)
这另外不取决于产生的格式w
(w
输出第一行的时间可能是也可能不是管道输出的一部分,具体取决于当前时间是一位数还是两位数,具体取决于什么实现的w
你使用)。