使用 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' {} +
在 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' {} +