shell - 搜索多个字符串

标签 shell awk grep

我正在使用 grep 命令从文件中获取所需的信息。我正在使用如下两个 grep 语句

XXXX='grep XXXX FILE A|sort|uniq|wc -l'
grep YYYY FILE A|uniq| > FILE B

现在文件被遍历了两次。但我只想知道,如果我能够在单个文件遍历中完成这两个步骤,即我想知道我是否可以使用类似于 egrep 的东西,在那里我可以对两个字符串和一个字符串进行 grep 我将使用它输入一个变量并将另一个字符串输出到一个文件中。

最佳答案

您可以使用以下代码。在这里,我们只在所有文件中搜索包含 XXXX 或 YYYY 的行一次,并将结果行存储到数组中。然后我们使用这个数组的元素来选择包含 XXXX 的行和包含 YYYY 的行。

filtered=`grep -E '(XXXX|YYYY)' FILE A`
XXXX=`for line in ${filtered[@]}; do echo $line; done | grep XXXX | sort | uniq | wc -l`
for line in ${filtered[@]}; do echo $line; done | grep YYYY | uniq > FILE B

所以文件不会被遍历两次!

关于shell - 搜索多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421900/

相关文章:

linux - 在unix awk中将utc时间戳转换为est

linux - grep 永远不会返回任何东西,除非我放一个 * 或 .最后 - 为什么?

git - 您如何在提交消息中搜索多个单词?

windows - 如何批量获取未识别的网络适配器名称

linux - 我有两个日期,需要找出时间差

c - 如何在 shell 命令行中输入退格字符?

linux - 语法 "|&"在 shell 语言中是什么意思?

AWK 为 sub/gsub 返回数字而不是字符串

awk - 如何在运行程序时在某个文件上运行 awk 脚本而不输入文件名

shell - 使用 tcl 执行 shell 命令