我有一个相当大的文件(35Gb),我想就地过滤这个文件(即我没有足够的磁盘空间来存放另一个文件),特别是我想 grep 并忽略一些模式 - 有没有办法在不使用其他文件的情况下执行此操作?
假设我想过滤掉所有包含foo:例如...
我的一个朋友指出,如果你这样做:
perl -pi.bak -e 's/foo/bar/' somefile
Run Code Online (Sandbox Code Playgroud)
当“somefile”实际上是一个符号链接时,perl 会按照文档所说的去做:
它通过重命名输入文件、按原始名称打开输出文件并选择该输出文件作为 print() 语句的默认文件来实现此目的。扩展名(如果提供)用于修改旧文件的名称以制作备份副本 [...]
这会导致一个新的符号链接“somefile.bak”指向未更改的真实文件,以及一个新的、已更改的常规文件“somefile”与更改。
在许多情况下,跟随符号链接将是所需的行为(即使它使 .bak 文件的正确位置不明确)。除了测试包装器中的符号链接并适当处理案例之外,是否有一种简单的方法可以做到这一点?
(sed做同样的事情,这是值得的。)