Cut
使用 cut 命令沒有得到想要的輸出?
[root@localhost ~]# ps aux | grep ata root 19 0.0 0.0 0 0 ? S 07:52 0:00 [ata/0] root 20 0.0 0.0 0 0 ? S 07:52 0:00 [ata_aux] root 1655 0.0 2.6 22144 13556 tty1 Ss+ 07:53 0:18 /usr/bin/Xorg :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-t1gMCU/database -nolisten tcp vt1 root 3180 0.0 0.1 4312 728 pts/0 S+ 14:09 0:00 grep ata [root@localhost ~]# ps aux | grep ata | cut -d" " -f 2 [root@localhost ~]#
我希望輸出中的第二列;但沒有得到任何東西。有任何想法嗎 ?
使用
-d " "
,欄位分隔符是一個(並且只有一個)空格字元。與 shell 分詞相反,cut
它對空格的處理與任何其他字元沒有任何不同。所以cut -d " " -f2
返回""
inroot 19
,就像它返回""
forcut -d: -f2
in一樣root:::19
。您需要擠壓空白以將任何空間序列轉換為一個空間:
ps aux | grep ata | tr -s ' ' | cut -d ' ' -f2
或者
awk
在其預設吐出模式下使用 where ,它不使用分隔符,而是拆分為非空白字元序列列表:ps aux | awk '/ata/{print $2}'
但是,在這種情況下,您可能需要使用:
pgrep -f ata
或者至少:
ps -eo pid= -o args= | awk '/ata/{print $1}'
僅匹配參數。