linux - 以下 "top"命令: top -p `pgrep process-name | tr "\\n" "," | sed 's/,$//' `的语法简单解释是什么

标签 linux bash sed grep

在今天之前,尽管对许多不同的 Linux 命令越来越熟悉,但我并没有尝试去理解 a useful command from another StackOverflow posting 的一些组件。将 top 命令过滤到某些进程(按进程名称):

top -p `pgrep process-name | tr "\\n" "," | sed 's/,$//'`

这个 top 命令包含各种语法组件。我可以依次查找每个组件(有些是显而易见的,例如管道命令 - 虽然我仍然不是 100% 对管道 | 之间的区别感到满意和重定向 >)。

但是,由于按进程名称过滤 top 命令通常很有用,而且从语法的角度来看,该命令表面上显然不是微不足道的,因此它对我(也许还有其他人)很有用) 以在一个地方引用此命令的所有部分的实际(简短)解释。

因此,我的问题如下。

上述 top 命令的所有组件的简要说明是什么(按进程名称过滤 top 的输出)?我将不胜感激,即使只是简单提及,也不要遗漏任何语法。谢谢!

最佳答案

我会尝试通过分段回答您的问题来分解它。

我们要看的第一部分是 sed 's/,$//'。我无法简要解释 sed 命令,但请查看 GNU sed manual了解更多信息。 's/,$//' 告诉 sed 查找行尾的任何逗号,并用任何内容替换它们。这将删除 sed 标准输入中每行末尾的所有逗号。

我们要看的下一 block 是 tr "\\n"","。同样,tr 可以做很多事情,但它的目的是转换字符。参见 tr man page以获得更详细的解释。这个用法是把所有的 UNIX 换行符(\n)都变成逗号。 \ 必须使用额外的 \ 进行转义,因为命令行会将 \n 视为新行并中断命令。

接下来是 pgrep process-name。为了完整起见,这里是 pgrep man page . pgrep 只是将符合选择标准的任何正在运行的进程的进程 ID (pid) 打印到标准输出。每个 pid 将单独打印在一行上。在这里,我们正在寻找命令 process-name 的 pid。

现在是管道 (|)。这将创建一个新流程,并将标准打印的任何内容发送到新流程的标准输入。

让我们看一下命令以了解管道如何更好地工作。 pgrep 进程名 | tr "\\n""," 会将所有 pid 的匹配 process-name 打印到标准输出,标准输出被传递到运行 tr 的进程的标准输入. tr "\\n"","| sed 's/,$//' 会将所有换行符从其标准输入转换为逗号,并将结果打印到其标准输出,然后传递给运行 sed 's/,$//的新进程'

所以整个命令pgrep process-name | tr "\\n"","| sed 's/,$//' 将为任何名为 process-name 的正在运行的进程打印以空格分隔的 pid 行。

还有两个要看的部分:top -p 和反引号 (``)。反引号创建了一个新进程,它在内部运行命令并在评估整个命令之前替换其标准输出。例如:

echo `echo "Hello, World!"`

打印 Hello, World! 到屏幕。

最后,top -p 获取 pid 列表并报告各种信息,例如运行时间、内存使用情况和 nice 值。有关更详细的说明,请参阅 top man page .

关于linux - 以下 "top"命令: top -p `pgrep process-name | tr "\\n" "," | sed 's/,$//' `的语法简单解释是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25066098/

相关文章:

linux - 使用 SED 将单词的首字母大写

bash - 使用shell修改文件夹及其所有子文件夹中的文件

regex - sed 用正则表达式替换 bbcodes

sed - 使用 shell (sed/awk) 从 ini 文件中获取部分列表

python - 使用 SUDS 清空 cookiejar

linux - 如何强制换出的 zsh 进程换入?

java - 检查与服务器的 TCP 连接数

c - 统计信息未显示正确的 inode 号

macos - 如何在 OS X 下获取当前连接的 VPN 名称

linux - 在 Amazon Linux AMI 版本 2014.03 上安装 docker 1.2