如何使用 grep 从 Linux 命令输出中仅提取特定列

如何使用 grep 从 Linux 命令输出中仅提取特定列

我想使用 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]',在行尾:'$'

相关内容