使用unix grep文件中的输入行

使用unix grep文件中的输入行,unix,ksh,Unix,Ksh,我的文件系统中有一个文件,其中包含许多PID。每个pid都位于新行上。例如 26011 26013 26016 26017 我想使用单个命令为文件中的每个pid执行“ps-eaf | grep pid” 有人可以帮助我如何使用文件中的输入PID以及文件中的每一行 谢谢您可以: for pid in `cat temp.pids`; do ps -eaf | grep $pid; done 其中temp.pids是包含每行一个PID的文件如果文件中包含所有PID,则可以使用grep-f将其本身

我的文件系统中有一个文件,其中包含许多PID。每个pid都位于新行上。例如

26011
26013
26016
26017
我想使用单个命令为文件中的每个pid执行“ps-eaf | grep pid”

有人可以帮助我如何使用文件中的输入PID以及文件中的每一行

谢谢

您可以:

for pid in `cat temp.pids`; do ps -eaf | grep $pid; done

其中temp.pids是包含每行一个PID的文件

如果文件中包含所有PID,则可以使用
grep-f
将其本身用作模式:

ps -eaf | grep -f file
man grep

-f FILE,--FILE=FILE

从文件中获取模式,每行一个。空文件 包含零个模式,因此不匹配任何内容

也许可以试试:

ps -ef | grep -E "$(cat pids.txt | tr '\n' '|' | head -c -1)"

这将把所有PID与管道连接起来,并将其用作grep的正则表达式

@Richie此解决方案有意义,它对您有用吗?是的,它对我有意义。您正在循环中运行我的命令。这就是我想我必须要做的,谢谢你的回答。然而,我认为grep-f是最好的、最简单的解决方案。这对于
grep-f
单独做的事情来说有点过分了。我以前没有使用过grep-f,它看起来很酷。然而,当我测试它时,我得到的结果与我的方法非常不同。也许我误解了什么。嗯,很奇怪。它应该是相同的:
-f
从文件中获取正则表达式,您的方法“构建”它们。我现在没有一个好的环境来检查,我明天会做一个好的,我忘记了这个选项:)谢谢。在我看来,这绝对是最好/最简单的解决方案。