在 xonsh shell 中,如何(递归地)替换给定目录中所有文件中的文本?
例如,我将如何重写以下 bash 命令:
find . -type f -name "*baz*" -exec sed -i 's/foo/bar/g' {} +
在 xonsh shell 中,如何(递归地)替换给定目录中所有文件中的文本?
例如,我将如何重写以下 bash 命令:
find . -type f -name "*baz*" -exec sed -i 's/foo/bar/g' {} +
我可以试试这个:
for fpath in pg`*baz*`:
if not fpath.is_file():
continue
fpath.write_text(fpath.read_text().replace('foo', 'bar'))
只需添加引号来告诉 xonsh{}
并且+
是参数:
find . -type f -name "*baz*" -exec sed -i 's/foo/bar/g' '{}' '+'
在 xonsh 中测试命令的完整示例:
echo 'foo foo' > some_baz_file
find . -type f -name "*baz*" -exec sed -i 's/foo/bar/g' '{}' '+'
cat some_baz_file
# bar bar
另一种方法是使用 xonsh宏命令并按原样运行 bash 行:
bash -c! find . -type f -name "*baz*" -exec sed -i 's/foo/bar/g' {} +
为了简化这种方法,有一个xontrib-sh扩展,它只允许!
在命令前添加符号:
! find . -type f -name "*baz*" -exec sed -i 's/foo/bar/g' {} +