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

时间:2017-11-03 22:52:48

标签: bash wildcard

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

其中XYZ是一些数字,但硬编码单独与我的目标相反 - 单行命令(不是脚本文件),使用原始名称搜索特定文本并将其输出到文件中

1 个答案:

答案 0 :(得分:2)

重定向一次只有一个目的地;因此,尝试重定向到一个表达式,当字符串拆分和全局展开时,会导致多个文件名导致“错误的重定向”错误。

你想要的是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