Linux 批量字符串替换命令(sed, perl )与vi文本下字符替换命令

时间:2022-03-01 23:28:21
1. perl 命令

例1 执行命令:
perl -p -i -e "s/China/Sumly/g" /www/*.htm /www/*.txt
上面的意思是说将www文件夹下所有的htm和txt文件中的“China”都替换为“Sumly”

例2 执行命令:

perl -p -i -e "s/mry_production/mry_production2/g" ./*.sql

上面的意思是将当前目录下所有的sql文件中的“mry_production”替换成“mry_production2”

 

2. sed 命令 

用sed命令可以批量替换多个文件中的字符串。
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
例如:我要把mahuinan替换为huinanma,执行命令:
sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www'

具体格式如下:
sed -i "s/oldString/newString/g" `grep oldString -rl /path`
实例代码:
sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`
sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl ./`
 
3. vi\vim 文本命令

:s/well/good/ 替换当前行第一个 well 为 good

:s/well/good/g 替换当前行所有 well 为 good

:n,$s/well/good/ 替换第 n 行开始到最后一行中每一行的第一个 well 为 good

:n,$s/well/good/g 替换第 n 行开始到最后一行中每一行所有 well 为 good

n 为数字,若 n 为 .,表示从当前行开始到最后一行

:%s/well/good/(等同于 :g/well/s//good/) 替换每一行的第一个 well 为 good

:%s/well/good/g(等同于 :g/well/s//good/g) 替换每一行中所有 well 为 good

可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#well/#good/# 替换当前行第一个 well/ 为 good/

:%s#/usr/bin#/bin#g 可以把文件中所有路径/usr/bin换成/bin