Ubuntu 中是否有一个命令行或工具可以“查找并替换” 80mb 文件中大约 150000 次的单词?
我想替换http://www.old-domain.com/subfolderA
为http://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