循环浏览目录bash中的所有文件

循环浏览目录bash中的所有文件,bash,file,loops,directory,Bash,File,Loops,Directory,我知道以前有人问过这个问题。然而,这些例子似乎都不适合我。因此: 我有所有类型的文件 xx1.txt xx2.txt xx3.txt ... 同一目录中的xx9.txt 现在,我想使用bash从每个文件中grep一个特定值: for file in *$i.txt do for ((i = 1; i < 10; i++)) do grep "energy" *.txt >> energies.txt done done *$i.txt中文件的 做 对于

我知道以前有人问过这个问题。然而,这些例子似乎都不适合我。因此: 我有所有类型的文件 xx1.txt xx2.txt xx3.txt ... 同一目录中的xx9.txt

现在,我想使用bash从每个文件中grep一个特定值:

for file in *$i.txt
do
   for ((i = 1; i < 10; i++))
   do
   grep "energy" *.txt >> energies.txt
   done
done
*$i.txt中文件的

做
对于((i=1;i<10;i++)
做
grep“energy”*.txt>>energies.txt
完成
完成

代码和grep运行良好,没有任何错误,但我总是从第一次迭代中得到grep,第一次能量打印9次。它从不看别人。我知道这些循环在bash中很复杂。但是,请不要建议将所有文件移动到单独的目录中并在其中循环。

您不需要如此复杂(错误)的嵌套循环。 请仅尝试此命令:

grep -h "energy" *{1..9}.txt >> energies.txt

如果您只需要文件的内容:

如果需要包含内容的文件名:

grep -H "energy" *[1-9].txt >> energies.txt

对于
*$i.txt
匹配的每个文件(无论
$i
是什么),您在匹配
*.txt
的所有文件上运行
grep
九次。您的意思可能是
grep“energy”“$file”
?但为什么要使用两个循环?!为什么不干脆
grep“energy”XXXX*.txt
?如果在循环的开头定义
$i
,你就不能在循环的开头使用它……我认为这个问题需要澄清很多才能回答。实际目标是什么?
$i
的值是多少?这些文件的名字是什么?外环是干什么用的?内环是干什么用的?数字9有什么神奇之处?如果文件不存在,这可能会引发错误
grep:*3.txt:没有这样的文件或目录
@BigDataLearner您是对的,但这是OP的初衷。我尊重它。如果您不想要文件名,请将
-h
选项添加到
grep
。如果您需要它们,即使
*[1-9].txt
只匹配一个文件,也可以添加
-H
选项。@xhiene-太好了-我更新了答案-我也学会了这个选项:)-谢谢
grep -H "energy" *[1-9].txt >> energies.txt