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