是否有任何方法可以使用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'?
谢谢。
实际上,awk正是你应该研究的工具:
ps axu | grep '[j]boss' | awk '{print $5}'
或者你可以完全抛弃grep,因为awk知道正则表达式:
ps axu | awk '/[j]boss/ {print $5}'
但是,如果出于某种奇怪的原因,你真的不能使用awk,你可以做其他更简单的事情,比如先将所有空格折叠成一个空格:
ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5
顺便说一下,grep的技巧是一种只获取jboss进程而不获取grep jboss进程的简洁方法(awk变体也是如此)。
grep进程在其进程命令中会有一个文本grep [j]boss,因此不会被grep本身捕获,grep本身正在寻找字符类[j]后面的boss。
这是一种避免某些人使用的| grep xyz | grep -v grep范式的好方法。
实际上,awk正是你应该研究的工具:
ps axu | grep '[j]boss' | awk '{print $5}'
或者你可以完全抛弃grep,因为awk知道正则表达式:
ps axu | awk '/[j]boss/ {print $5}'
但是,如果出于某种奇怪的原因,你真的不能使用awk,你可以做其他更简单的事情,比如先将所有空格折叠成一个空格:
ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5
顺便说一下,grep的技巧是一种只获取jboss进程而不获取grep jboss进程的简洁方法(awk变体也是如此)。
grep进程在其进程命令中会有一个文本grep [j]boss,因此不会被grep本身捕获,grep本身正在寻找字符类[j]后面的boss。
这是一种避免某些人使用的| grep xyz | grep -v grep范式的好方法。