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