在Cygwin下,perl -pi -e将始终保存.bak文件。我不太明白为什么,但我想摆脱它。
我通常这样使用 Perl 饼:
git ls-files | egrep '[.](asm|c|h|inc)' | xargs perl -pi -e 's/foo/bar/'
Run Code Online (Sandbox Code Playgroud)
然后我需要执行这个:
git ls-files | egrep '[.](asm|c|h|inc)' | sed 's/$/.bak/' | rm -f
Run Code Online (Sandbox Code Playgroud)
我尝试创建一个函数,但xargs不喜欢 bash 函数。有没有办法轻松地将我的两个命令组合在一起?
当然,我更愿意使用find或ls获取我的文件。
实际上,最适合我的解决方案是声明一个别名,perl -pi -e自动删除不需要的.bak文件。
有什么建议么?
您可以在xargs.
git ls-files '*.asm' '*.[ch]' '*.inc' |
xargs bash -c 'perl -pi -e "s/foo/bar/" "$@"; for f; do rm -f "$f.bak"; done' _
Run Code Online (Sandbox Code Playgroud)
另请注意我如何重构egrep为git ls-files.