linux下替换超大文件中的字符串
1.vim下替换
首先要打开文件
vim 文件名
然后在vim的末行模式(也就是打开后接着输入冒号)下替换。
(1)替换当前光标所在的行
:s/替换前(old)/替换后(new)/gc
**g:**替换当前行所有的old,不加g只替换第一个old;
c:替换的时候添加提示信息
(2)替换一个范围行
:x,ys/替换前(old)/替换后(new)/gc
注意:x<y,不然会报错。x,y是行号。
(3)替换当前文档的所有行
:%s/替换前(old)/替换后(new)/gc
注意:这样替换当遇到一个巨大的文档时容易失败,进程直接被kill了。这时候就需要用到下面这种替换的方法。
2.命令sed替换
sed(Stream EDitor)是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使用参数-i,文件内容并没有改变。sed的功能挺多的,这里就说一下字符串替换这一个功能。
基本的语法
sed [参数] 命令 文件
(1)替换某一个单行
sed -i '行号s/替换前(old)/替换后(new)/g' 文件名
-i:使用会文件内容才会改变
g:一行全部,不加就第一个
(2)替换一个范围行
sed -i 'x,ys/替换前(old)/替换后(new)/g' 文件名
x,y是行号
(3)替换当前文档的所有行
sed -i 's/替换前(old)/替换后(new)/g' 文件名