一尘不染

使用Bash按列划分命令输出?

linux

我想做这个:

  1. 运行命令
  2. 捕获输出
  3. 选择一条线
  4. 选择该行的一列

举例来说,假设我想从中获取命令名称$PID(请注意,这只是一个例子,我并不建议这是从进程ID中获取命令名称的最简单方法-
我的真正问题是另一个我无法控制其输出格式的命令)。

如果我跑步,ps我会得到:

  PID TTY          TIME CMD
11383 pts/1    00:00:00 bash
11771 pts/1    00:00:00 ps

现在我做的ps | egrep 11383,并得到

11383 pts/1    00:00:00 bash

下一步:ps | egrep 11383 | cut -d" " -f 4。输出为:

<absolutely nothing/>

问题是cut将输出剪切单个空格,并ps在第二和第三列之间添加一些空格以保持表的相似性,因此cut选择一个空字符串。当然,我可以cut选择第7个字段而不是第4个字段,但是我怎么知道,特别是当输出是可变的且事先未知时。


阅读 312

收藏
2020-06-07

共1个答案

一尘不染

一种简单的方法是添加[tr](http://linux.die.net/man/1/tr)来压缩任何重复的字段分隔符:

$ ps | egrep 11383 | tr -s ' ' | cut -d ' ' -f 4
2020-06-07