【发布时间】:2020-01-26 06:14:02
【问题描述】:
我有一个文件,它比需要运行此脚本的服务器上的可用内存量大得多。
在该文件中,我需要运行一个基本的正则表达式,它一次在两行之间进行查找和替换。我已经研究过使用 sed、awk 和 perl,但在这种情况下,我无法让它们中的任何一个按照我的需要工作。
在一个较小的文件上,下面的行可以满足我的需要:
perl -0777 -i -pe 's/,\s+\)/\n\)/g' inputfile.txt
本质上,只要一行以逗号结尾,而下一行以右括号开头,请删除逗号。
当我尝试在我的生产文件上运行它时,几分钟后我在终端中收到“Killed”消息,文件内容被完全删除。在那期间我一直在观察内存使用情况,正如预期的那样,它以 100% 的速度运行并广泛使用交换空间。
有没有办法让 perl 命令一次在两行上运行,或者替代 bash 命令可以达到相同的结果?
如果通过保持文件大小相同来更容易,那么我还可以选择用空格字符替换逗号。
【问题讨论】:
-
我不确定确切的问题陈述——所以:如果一行以逗号结尾,而下一行以
)开始,则删除逗号,否则什么也不做。这是对问题的完整陈述吗? -
是的,没错。
-
带左括号的行也可以以逗号结尾吗?
-
包含左括号和/或右括号的行也可以以逗号结尾。
-
只是想明白:所以你只对文件中
,\n)的实例感兴趣,并且你想将所有这些都转换为\n)?