Grep 文件中的字符串列表

问题描述 投票:0回答:1

我在名为

users.txt
的文件中有一个字符串列表。 例如,此文件包含由新行分隔的用户名列表:

Jhon
Paul
Mark
Harry

我必须对这个字符串列表进行 grep 操作,以便从另一个文件(称为

myLog.out
)中提取包含该用户名的行。

为了实现我的目标,我使用以下命令:

grep -wFf users.txt myLog.out > out.txt

现在,我的

out.txt
只包含
users.txt
文件中姓氏的出现,即:

2017-12-17 15:13:41,191 [13] INFO  it.test.Service- user: Harry
2017-12-17 15:13:41,191 [13] INFO  it.test.Service- user: Harry
2017-12-17 15:13:41,191 [13] INFO  it.test.Service- user: Harry

myLog.out
文件中出现了 Jhon 和 Paul,但我无法使用之前的 grep 命令检索它们。

grep
1个回答
0
投票

grep 命令似乎只捕获 users.txt 文件中最后一个用户名的出现。这是因为 users.txt 中的每个用户名都由换行符分隔,并且 grep 单独解释每一行。

要捕获 myLog.out 中所有用户名的出现,您可以将所有用户名连接成一个模式,并用 | 分隔。 (管道),然后将该模式与 -E 选项一起使用以扩展正则表达式。具体方法如下:

grep -wFf <(tr '\n' '|' < users.txt | sed 's/|$//') -E myLog.out > out.txt

此命令将匹配 myLog.out 中包含 users.txt 中列出的任何用户名的任何行,并将输出保存到 out.txt。

© www.soinside.com 2019 - 2024. All rights reserved.