列出具有特定名称并包含特定字符串的文件

列出具有特定名称并包含特定字符串的文件

我正在尝试找出一种编写 shell 脚本的方法,该脚本列出以某些字符/数字开头和结尾的文件名,但也包含文件中的某个字符串。

假设文件名必须以数字开头并以字符结尾,但该文件还必须包含“xyz”。我该如何计算才能使结果只是文件的名称。

应在当前目录中查找文件名。

我知道如何分别获得它们,但我不知道如何将两者结合在一起以获得正确的结果。

示例:列出文件名:
- 以“F”开头并以数字结尾。
- 文件中包含“xyz”。
文件 1 =“xyz”
文件 2 =“xYz”
文件 3 =“xyz”
图块 4 =“xyz”
文件 =“xyz”

这里只列出 File1 和 File3,因为它们符合条件

答案1

grep -l 'xyz' F*[0-9]

在名称以“F”开头并以数字结尾的每个文件中查找 xyz。该-l开关使 Grep 抑制匹配行并仅报告匹配的文件。

答案2

#!/bin/bash
find . -name "F*[[:digit:]]" | while read line; do 
    grep -q xyz $line 
    if [ $? -eq 0 ]; then 
        echo $line 
    fi;  done

上面的代码将在当前目录中查找以F数字开头和结尾的文件。然后它将循环遍历每个通过标准的文件find,并且每次迭代都将grep在文件中执行以查找字符串xyz。由于 .grep 输出未打印出来-q。然后它将检查grep命令的错误状态。如果文件中存在匹配项,则 grep 返回0,因此echo $line将执行。此处,指的是从已通过管道传输到部件的命令$line中找到的文件。如果返回不匹配,则会返回,因此不会运行。findwhilegrep1echo $line

相关内容