我想使用 grep 只查看 Linux 命令输出中的特定列。当我使用此命令时,我得到以下输出:
$ ps ax | grep sshd | grep 'priv' | sort -k 3
4886 ? Ss 0:00 sshd: vpnuser002 [priv]
10637 ? Ss 0:00 sshd: vpnuser003 [priv]
10651 ? Ss 0:00 sshd: vpnuser003 [priv]
11594 ? Ss 0:00 sshd: vpnuser003 [priv]
11669 ? Ss 0:00 sshd: vpnuser003 [priv]
11817 ? Ss 0:00 sshd: vpnuser003 [priv]
9680 ? Ss 0:00 sshd: vpnuser003 [priv]
4034 ? Ss 0:00 sshd: vpnuser006 [priv]
我必须在命令中更改什么才能只看到最后一列?像这样:
sshd: vpnuser002 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser006 [priv]
我正在使用 Ubuntu Linux。
答案1
o command
您可以输出不带标题的命令列h
,然后grep
输出特定输出:
ps axho command | grep '^sshd:.*\[priv\]$' | sort
答案2
像这样:
$ <INPUT> | grep -o '\bsshd: .*\[priv\]$'
或者
ps -C sshd all | grep -o '\bsshd: .*\[priv\]$'
输出
sshd: vpnuser002 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser003 [priv]
sshd: vpnuser006 [priv]
正则表达式匹配如下:
节点 | 解释 |
---|---|
\b |
单词字符和非单词字符之间的边界 |
sshd: |
'sshd:' |
.* |
除 \n 之外的任何字符(0 次或多次(匹配尽可能多的数量)) |
\[priv\]$ |
'[priv]',在行尾:'$' |