我正在尝试更改多个文本文件中的字符串(配置已迁移到其他用户)。我使用了以下命令:
grep -iIlr "/home/user/.local" | xargs sed -i 's/\/home\/user\/\.local/~\/\.local/g'
也尝试过这个:
grep -iIlr "/home/user/.local" | xargs -d '\n' sed -i "s/\/home\/user\/\.local/~\/\.local/g"
他们不工作。错误是由sed产生的,命令的输出是:
sed: can't read dir/file1: No such file or directory
sed: can't read dir/file2: No such file or directory
...
sed: can't read dir/file99: No such file or directory
每个文件都会产生错误(总共 99 个)。返回的 dir/file1..99 是有效的,它是文件的正确路径和文件名。
仅grep即可生成正确的文件列表。文件名上没有特殊字符,我认为也没有空格(对此并不完全确定)。xargs 传递的不是正确的列表吗?
操作系统:RHEL 8.10 已完全更新,
GNU grep v 3.1,
GNU sed 4.5,
xargs(GNU findutils)4.6.0
添加grep -iIlr "/home/user/.local"
命令的输出(示例最后几行)。
密码,~/.local/pipx
venvs/pipx/bin/pipx
venvs/pipx/bin/activate.fish
venvs/pipx/bin/activate-global-python-argcomplete
venvs/pipx/bin/activate.csh
venvs/pipx/pyvenv.cfg
venvs/pipx/lib/python3.11/site-packages/pipx_shared.pth
shared/bin/pip3.11
shared/bin/activate
shared/bin/pip3
shared/bin/pip
shared/bin/wheel
shared/bin/activate.fish
shared/bin/activate.csh
shared/pyvenv.cfg