linux - 使用 Bash 按列拆分命令输出?

我想这样做:

  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

Now I do ps | egrep 11383 and get

11383 pts/1    00:00:00 bash

下一步:ps | egrep 11383 |剪切 -d""-f 4。输出是:

<absolutely nothing/>

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

最佳答案

一种简单的方法是添加 <a href="http://linux.die.net/man/1/tr" rel="noreferrer noopener nofollow">tr</a> 的通行证挤出任何重复的字段分隔符:

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

https://stackoverflow.com/questions/1629908/

相关文章:

linux - 提取并删除目录中的所有.gz - Linux

python - 什么时候应该使用 Flask.g?

c - 如何在C程序中列出目录中的文件?

python - 规范化数据框的列

linux - 如何为长路径制作 "alias"?

python - 如何从 Python 中的 URL 读取图像数据?

python - 如何更改 seaborn 轴或图形级别图的图形大小

python - 在 Linux 上通过 Python 脚本截取屏幕截图

python - UnicodeEncodeError : 'charmap' codec can'

linux - 将 cron 选项卡设置为工作日的特定时间