在BASH脚本中匹配具有可变端的一系列文件名



假设我有许多名为file1,file2,file3等的文件。我正在尝试找到一种匹配第一个n文件的方法,在bash脚本中,n是一个变量。这是我到目前为止考虑的选项:

  • 支撑扩展,即file{1..3},不允许变量结束。换句话说,file{1..$N}不起作用。

  • 范围表达式可用于匹配数字字符。它允许变量末端,即file[1-$N],但这仅在n>9。

  • 之前起作用
  • $(seq 1 $N)可用于创建一个数字序列,但由于问题是匹配文件名中的数字序列,因此无济于事。文件名是简单的1、2、3,等等,这将起作用。

这是另一个解决方案。我不是在提倡它,但是再次可以使用eval的合法用途;

N=5
eval echo {1..$N}

所以你可以做

eval ls file{1..$N}

我找到了使用扩展地球的解决方案。他们需要使用shopt -s extglob命令启用它们。@(...)可用于匹配由|分开的任何一组模式。角色,例如file@(1|2|3)。现在,我只需要用|生成数字序列作为分离器角色而不是新线:

shopt -s extglob
range=$(seq 1 $N)
ls file@(${range//$'n'/|})

您可以简单地做

for file01.txt, file02.txt, file345.txt, file678.txt...
cat file*.txt > file_all.txt

还是我错过了点?

相关内容

  • 没有找到相关文章

最新更新