如何按搜索顺序grep多个词条并输出?

use*_*359 4 unix macos command-line grep

我尝试了一些方法,但似乎没有取得任何进展 - 我有一个包含一些数据行的文本文件,我想要该文件中的一些数据行。每行都有一个我可以grep的唯一标识符。

如果我使用

grep 'name1\|name2\|name3\|name4' file.txt > newfile.txt
Run Code Online (Sandbox Code Playgroud)

它完成了工作并搜索了我想要的所需行,但是,我想要按照我指定的顺序排列的行 - 在这个例子中,我首先想要 name1 行,然后是 name2 行,然后是 name3 行,最后是 name4 行。

但是,例如在我的原始文件中,行的顺序是 name2,然后是 name4,然后是 name3,然后是 name1,输出文件似乎也有这个顺序的行。

有没有办法轻松订购grep?

id 是按块排序的,因此所有具有 name1 的行例如彼此相邻。

感谢您的任何建议!

Tod*_*obs 7

使用循环从文件中读取单词

给定一个要 grep 的单词文件,例如:

root
lp
syslog
nobody
Run Code Online (Sandbox Code Playgroud)

您可以使用读取循环对另一个文件中的固定字符串重复 grep。例如,使用 Bash shell 的默认REPLY变量和存储在/tmp目录中的 word 文件,这将起作用:

while read; do
    grep --fixed-strings "$REPLY" /etc/passwd
done < /tmp/words
Run Code Online (Sandbox Code Playgroud)

笔记

  1. 发布的示例不会阻止多个匹配,但它确保匹配按 中定义的顺序进行/tmp/words
  2. 出于性能原因,该示例使用 GNU grep 和固定字符串。您的里程可能因其他 grep 和正则表达式而异。