我想做这个:
举例来说,假设我想从中获取命令名称$PID(请注意,这只是一个例子,我并不建议这是从进程ID中获取命令名称的最简单方法- 我的真正问题是另一个我无法控制其输出格式的命令)。
$PID
如果我跑步,ps我会得到:
ps
PID TTY TIME CMD 11383 pts/1 00:00:00 bash 11771 pts/1 00:00:00 ps
现在我做的ps | egrep 11383,并得到
ps | egrep 11383
11383 pts/1 00:00:00 bash
下一步:ps | egrep 11383 | cut -d" " -f 4。输出为:
ps | egrep 11383 | cut -d" " -f 4
<absolutely nothing/>
问题是cut将输出剪切单个空格,并ps在第二和第三列之间添加一些空格以保持表的相似性,因此cut选择一个空字符串。当然,我可以cut选择第7个字段而不是第4个字段,但是我怎么知道,特别是当输出是可变的且事先未知时。
cut
一种简单的方法是添加[tr](http://linux.die.net/man/1/tr)来压缩任何重复的字段分隔符:
[tr](http://linux.die.net/man/1/tr)
$ ps | egrep 11383 | tr -s ' ' | cut -d ' ' -f 4