是否有任何方法可以使用cut命令为更多的空格指定字段分隔符?(比如“”+)? 例如:在下面的字符串中,我想达到值'3744',我应该说什么字段分隔符?

$ps axu | grep jboss

jboss     2574  0.0  0.0   3744  1092 ?        S    Aug17   0:00 /bin/sh /usr/java/jboss/bin/run.sh -c example.com -b 0.0.0.0

cut -d' '不是我想要的,因为它只用于一个单独的空格。 awk也不是我想要的,但是如何处理'cut'?

谢谢。


当前回答

解决这个问题的一个方法是:

$ps axu | grep jboss | sed 's/\s\+/ /g' | cut -d' ' -f3

将多个连续空格替换为一个空格。

其他回答

我仍然喜欢Perl处理空格字段的方式。 第一个字段是$F[0]。

$ ps axu | grep dbus | perl -lane 'print $F[4]'

解决这个问题的一个方法是:

$ps axu | grep jboss | sed 's/\s\+/ /g' | cut -d' ' -f3

将多个连续空格替换为一个空格。

如果你必须使用cut命令,另一种方法

ps axu | grep [j]boss |awk '$1=$1'|cut -d' ' -f5

在Solaris下,将awk替换为nawk或/usr/xpg4/bin/awk

Awk版本可能是最好的方法,但如果你首先用tr压缩重复,你也可以使用cut:

ps axu | grep jbos[s] | tr -s ' ' | cut -d' ' -f5
#        ^^^^^^^^^^^^   ^^^^^^^^^   ^^^^^^^^^^^^^
#              |            |             |
#              |            |       get 5th field
#              |            |
#              |        squeeze spaces
#              |
#        avoid grep itself to appear in the list

作为替代,总是有perl:

ps aux | perl -lane 'print $F[3]'

或者,如果你想要从字段#3开始的所有字段(如上面的答案之一所述):

ps aux | perl -lane 'print @F[3 .. scalar @F]'