解析多行文本 bash

解析多行文本 bash

我需要解析

0 R username+ 13790 13743  0  80   0 - 28162 -      19:07 pts/0    00:00:00 grep --color=auto pm2
4 S root     25197     1  0  80   0 - 237119 ep_pol Apr05 ?       00:00:32 node /usr/local/lib/node_modules/pm2/bin/pm2

输出类型并找到该进程的 PID /usr/local/lib/node_modules/pm2/bin/pm2

到目前为止

PROCESS_ID=$(ps -elf | grep pm2 | grep -v grep | awk 'FNR<2{print $4}')

但这只能获取第一行的 PID。无法保证正确的 PID 是哪一行,因为 upstart 程序有时会显示 2-3 个此 grep 的结果。我想我需要一种方法来过滤要读取到 awk 的行,因为所需的行一次只能出现一行。任何帮助表示感谢

答案1

看一眼pgrep

pgrep -f /usr/local/lib/node_modules/pm2/bin/pm2

答案2

awk 可以通过以 /regex/ 开头的表达式进行过滤

我变了

ps -elf | grep pm2 | grep -v grep | awk 'FNR<2{print $4}'

ps -elf | grep pm2 | grep -v grep | awk '/node_modules/FNR<2{print $4}'

并且成功了。您还可以通过转义斜杠来搜索更长的路径:

ps -elf | grep pm2 | grep -v grep | awk '/\/lib\/node_modules/FNR<2{print $4}'

也有效

尽管 awk 很可怕,但这篇文章却非常简单 http://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/

相关内容