包含两个或多个特定字符串的Grep文件

Hub*_*vin 23 unix grep

我需要找到特定字符串出现两次或更多次的文件.

例如,对于三个文件:

档案1:

Hello World!
Run Code Online (Sandbox Code Playgroud)

文件2:

Hello World!
Hello !
Run Code Online (Sandbox Code Playgroud)

档案3:

Hello World!
Hello
Hello Again.
Run Code Online (Sandbox Code Playgroud)

-

我想要grep Hello并且只获取文件2&3.

Joh*_*n C 21

那这个呢:

grep -o -c Hello * | awk -F: '{if ($2 > 1){print $1}}'
Run Code Online (Sandbox Code Playgroud)


sav*_*nto 10

由于问题被标记为grep,因此这是一个仅使用该实用程序和bashawk不需要)的解决方案:

#!/bin/bash
for file in *
do
  if [ "$(grep -c "Hello" "${file}")" -gt 1 ]
  then
    echo "${file}"
  fi
done
Run Code Online (Sandbox Code Playgroud)

可以是单线:

for file in *; do if [ "$(grep -c "Hello" "${file}")" -gt 1 ]; then echo "${file}"; fi; done
Run Code Online (Sandbox Code Playgroud)

解释

  • 您可以for file in *使用您想要获取所有数据文件的任何 shell 扩展来修改该语句。
  • grep -c 返回与模式匹配的行数,一行上的多个匹配仍然只计算一个匹配的行。
  • if [ ... -gt 1 ]测试文件中是否有不止一行匹配。如果是这样的话:
  • echo ${file} 打印文件名。