我的一个朋友指出,如果您这样做:
perl -pi.bak -e 's/foo/bar/' somefile
当“ somefile”实际上是一个符号链接时,perl会按照文档所说的去做:
它通过重命名输入文件,使用原始名称打开输出文件并选择该输出文件作为print()语句的默认值来做到这一点。该扩展名(如果提供)用于修改旧文件的名称以制作备份副本[...]
这将导致指向未更改的实际文件的新符号链接“ somefile.bak”,以及具有更改的新的已更改常规文件“ somefile”。
在许多情况下,遵循符号链接将是理想的行为(即使它使.bak文件的正确位置不明确)。除了测试包装器中的符号链接并适当处理大小写以外,还有其他简单的方法吗?
(sed
做同样的事情,这是值得的。)
-p -i
在脚本中重新实现。