在 *nix 中,对文件名的子字符串使用通配符的最简单的方法是什么?

在 *nix 中,对文件名的子字符串使用通配符的最简单的方法是什么?

我想做一些类似的事情,比如采用通配符匹配的一部分,并将其用作正则表达式匹配。该命令可能看起来像这样

cat foo_* | python magic.py > magic_*

如果我的文件名是

   foo_biz
   foo_baz

我希望输出在名为的文件中

   magic_biz
   magic_baz

有效地将文件名从 更改foo_*magic_*

是否可以在 shell 命令中执行此操作?我正在使用bash,但其他 shell 的答案也可以。

答案1

如果我理解你想要做什么,你可以完成它,但是需要做更多的工作:

for f in foo_*; do python magic.py <"$f" >"${f/foo/magic}"; done

(注:我还替换了猫的无用用途带有<重定向。)

答案2

与戈登的精彩回答略有不同:

foos=(foo_*)
suffixes=(${foos[@]#foo_})
for sfx in "${suffixes[@]}"; do
    python magic.py < "foo_$sfx"  > "magic_$sfx"
done

答案3

$ touch foo_{biz,baz}

$ ls foo_*
foo_baz  foo_biz

$ printf "%s\n" foo_* | sed 's/^foo_/magic_/'
magic_baz
magic_biz

相关内容