在 80mb 文件中查找和替换?

Ada*_*dam 5 command-line text-processing

Ubuntu 中是否有命令行或工具可以在 80mb 文件中“查找和替换”大约 150000 次的单词?

我想替换http://www.old-domain.com/subfolderAhttp://www.new-domain.com/subfolderB

我用 gEdit 和 Atom 尝试过,但都崩溃了。

des*_*ert 10

sed 可以做:

sed -i.bak '/oldword/s//newword/g' very_big_file
Run Code Online (Sandbox Code Playgroud)

这会直接编辑文件,留下一个名为very_big_file.bak. 它会扫描您的文件中包含的行oldword并将每次出现替换为newword,这应该比s/oldword/newword/g遍历每一行快得多(请参阅在非常大的文件中快速替换文本)。引用sed1line

优化速度:如果需要提高执行速度(由于输入文件大或处理器或硬盘速度慢),如果在给出“s/.../. ../“ 操作说明。因此:

sed 's/foo/bar/g' filename         # standard replace command   
sed '/foo/ s/foo/bar/g' filename   # executes more quickly
sed '/foo/ s//bar/g' filename      # shorthand sed syntax
Run Code Online (Sandbox Code Playgroud)

如果oldword和/或newword包含斜杠,您可以使用反斜杠(例如http:\/\/www)将它们转义或使用不同的分隔符,例如下划线:

sed -i.bak '/oldword/s__newword_g' very_big_file
sed -i.bak '\_oldword_s//newword/g' very_big_file
sed -i.bak '\_oldword_s__newword_g' very_big_file
Run Code Online (Sandbox Code Playgroud)

在您的确切情况下,我会这样做:

sed -i.bak '\_http://www.old-domain.com/subfolderA_s__http://www.new-domain.com/subfolderB_g' very_big_file
Run Code Online (Sandbox Code Playgroud)