使用 xonsh 查找和替换文件中的文本

Find and replace text in files with xonsh

在 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 macro command 并且只使用 运行 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' {} +