我正在尝试找出一种编写 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
中找到的文件。如果返回不匹配,则会返回,因此不会运行。find
while
grep
1
echo $line