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

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

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

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

我尝试使用 gEdit 和 Atom 但是都崩溃了。

答案1

sed可以做:

sed -i.bak '/oldword/s//newword/g' very_big_file

这将直接编辑文件,并留下一个名为 的备份very_big_file.bak。它会扫描文件中的行oldword,并替换每个出现的行newword,这应该比运行s/oldword/newword/g快得多每一个线(见在非常大的文件中快速替换文本)引用sed1行

优化速度:如果需要提高执行速度(由于输入文件很大或处理器或硬盘速度很慢),如果在给出“s/.../.../”指令之前指定“find”表达式,则替换将执行得更快。因此:

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

如果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

针对您的具体情况,我会这样做:

sed -i.bak '\_http://www.old-domain.com/subfolderA_s__http://www.new-domain.com/subfolderB_g' very_big_file

相关内容