Bash 使用通配符作为参数的命令

Bash Command using wildcard as an argument

x=rankings* && grep -A10 -P '^Ranked :$' $x | tail -n +2 > results$x

这是一个无论使用何种方法我都无法开始工作的命令,而且我在 10 次以上的堆栈溢出搜索中找不到任何东西。

有没有办法将通配符作为参数提供给单行命令?我想根据目录中的现有文件制作一个文件列表。

我得到的最接近的是

x=rankingsX.Y.Z && grep -A10 -P '^Ranked :$' $x | tail -n +2 > results$x

其中 X Y Z 是一些数字,但是这个 单独硬编码与我的 objective 相反 - 一个单行命令(不是脚本文件)搜索和使用原始名称将特定文本输出到文件中。

一个重定向一次只有一个目的地;因此,尝试重定向到一个表达式,该表达式在字符串拆分和全局扩展时会产生多个文件名,从而导致 "bad redirection" 错误。

你想要的是 x 一次有一个值,对于 glob 匹配的每个值——也就是说这是一个 for 循环的工作。

for x in rankings*; do grep -A10 -P '^Ranked :$' "$x" | tail -n +2 >"results$x"; done

...也可以写在多行上(即使是交互式 shell),如:

for x in rankings*; do
  grep -A10 -P '^Ranked :$' "$x" | tail -n +2 >"results$x"
done