0

在 xonsh shell 中,如何(递归地)替换给定目录中所有文件中的文本?

例如,我将如何重写以下 bash 命令:

find . -type f -name "*baz*" -exec sed -i 's/foo/bar/g' {} +
4

2 回答 2

1

我可以试试这个:

for fpath in pg`*baz*`:
    if not fpath.is_file():
        continue
    fpath.write_text(fpath.read_text().replace('foo', 'bar'))
于 2020-06-02T00:29:02.440 回答
1

只需添加引号来告诉 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' {} +
于 2020-10-17T22:51:16.080 回答