繁体   English   中英

使用通配符作为参数的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

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

重定向一次只能有一个目的地。 因此,尝试重定向到一个表达式,该表达式在进行字符串拆分和glob扩展后会导致多个文件名,从而导致“错误的重定向”错误。

您想要的是x具有一个值,对于glob匹配的每个值,这就是for循环的工作。

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

...也可以写在多行上(甚至在交互式外壳上),如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM