在我们日常开发工作中,经常会遇到,需要对文本文件进行字符串替换。
WINDOWS系统中,一般就是Ctrl+H,然后执行全部替换就好了。
但是,如果Linux系统应该如何呢?
VIM中文本替换
vim中,进行文本替换比较简单,直接使用如下命令即可。
:s用于单行替换;
:$s可以指定范围进行替换;
:%s用于全局替换。
对于指定范围的替换用$s ,全局的替换尽量用%s,%s不能指定范围进行替换(即使指定了范围仍然进行全局的替换)。
g参数:
- g 放在命令末尾,表示对搜索字符串的每次出现进行替换;
- 不加 g,表示只对搜索字符串的首次出现进行替换;
- g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
替换当前行第一个str1为str2
:s/str1/str2/
替换当前行所有str1为str2
:s/str1/str2/g
替换第 n 行开始到最后一行中每一行的第一个str1为str2
:n,$s/str1/str2/
替换第 n 行开始到最后一行中每一行所有str1为str2
:n,$s/str1/str2/g
(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
替换每一行的第一个str1为str2
:%s/str1/str2/
替换每一行中所有str1为str2
:%s/str1/str2/g
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
- 替换当前行第一个str1/ 为str2/
:s#str1/#str2/#
那需要同时替换多个文件中的内容,该怎么办呢?
答案就是:sed。
格式: sed -i “s/查找字符串/替换新字符串/g” grep 查找字符串 -rl 路径
-i 表示inplace edit,就地修改文件;
-r 表示搜索子目录;
-l 表示输出匹配的文件名;
s表示替换,d表示删除;
g表示替换所有。
- 将当前目录下,所有192.168.93.43替换为192.168.93.109
sed -i "s/192.168.93.43/192.168.93.109/g" `grep "192.168.93.43" -rl ./`