Search code examples
linuxdelimitercut

How to specify more spaces for the delimiter using cut?


Is there a way to specify multiple spaces as a field delimiter with the cut command (something like a " "+ regex)? For example, what field delimiter I should specify for the following string to reach value 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' ' is not what I want, because it's only for a single space. awk is not what I am looking for either, so how to do this with cut?


Solution

  • Actually awk is exactly the tool you should be looking into:

    ps axu | grep '[j]boss' | awk '{print $5}'
    

    or you can ditch the grep altogether since awk knows about regular expressions:

    ps axu | awk '/[j]boss/ {print $5}'
    

    But if, for some bizarre reason, you really can't use awk, there are other simpler things you can do, like collapse all whitespace to a single space first:

    ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5
    

    That grep trick, by the way, is a neat way to only get the jboss processes and not the grep jboss one (ditto for the awk variant as well).

    The grep process will have a literal grep [j]boss in its process command so will not be caught by the grep itself, which is looking for the character class [j] followed by boss.

    This is a nifty way to avoid the | grep xyz | grep -v grep paradigm that some people use.