我需要从以下所有文件中将"vi_chiron“替换为"vi_huracan”。我正在使用以下命令行,并已将所有底层文件的权限更改为完全访问:
grep -ri "vi_chiron" ./ | grep -v Header | xargs perl -e "s/vi_chiron/vi_huracan/" -pi
我得到了一个错误:“无法打开./build/drivers_file.min:#:没有这样的文件或目录。”还有其他许多类似的错误。知道为什么吗?下面是文件的权限:
ll build/drivers_file.min
-rwxrwxrwx 1 ask vi 5860 Mar 13 12:07 build/drivers_file.min
发布于 2018-03-13 00:11:24
您可以通过以下方式更改命令:
grep -ril "vi_chiron" . | xargs grep -vl Header | xargs perl -e "s/vi_chiron/vi_huracan/" -pi
或
find . -type f -exec grep -ril "vi_chiron" | xargs grep -vl Header | xargs perl -e "s/vi_chiron/vi_huracan/" -pi
为了操作所有不包含Header
的文件,并将vi_chiron
转换为vi_hurican
。
,如果我是你,我会简化链子,然后反过来做:
grep -rvl Header . | xargs sed -i.bak 's/vi_chiron/vi_hurican/'
如果您有足够的信心,将-i.bak
更改为-i
,以便sed不进行任何备份。
还请注意,如果要将更改和替换放在全局使用:sed -i.bak 's/vi_chiron/vi_hurican/g'
,则更改和替换不是全局的。
'-iSUFFIX‘’--就地=后缀‘此选项指定要就地编辑文件。GNU 'sed‘通过创建一个临时文件并将输出发送到该文件而不是标准输出来实现。(1) 这个选项意味着'-s‘。当到达文件的末尾时,临时文件将重命名为输出文件的原始名称。如果提供扩展,则用于在重命名临时文件之前修改旧文件的名称,从而生成备份副本(2)。遵循以下规则:如果扩展名不包含“*”,则将其作为后缀追加到当前文件名的末尾;如果扩展名确实包含一个或多个“*”字符,则将_each_星号替换为当前文件名。这允许您在备份文件中添加前缀,而不是(或者除了)后缀,甚至可以将原始文件的备份副本放到另一个目录中(只要该目录已经存在)。如果未提供扩展名,则将覆盖原始文件而不进行备份。
https://stackoverflow.com/questions/49250467
复制相似问题