linux下用shell、sed批量替换多个文件中的字符串

时间:2021-07-15 23:52:39

sed

sed是一种非交互式的流编辑器,可动态编辑文件。vim是打开文件后和用户进行互动操作的,sed是非互动的,它处理的对象是文件的数据流。sed的工作模式是,对每一行数据,若符合样式,就执行指定的操作。
sed工具的语法如下:

sed '样式命令'  文件 

意思是,样式匹配成功后就执行指定的命令。它不会更改文件的内容,而是读取文件之后,经过编辑,然后把结果显示到标准输出上。如果想存储执行结果,就得自行将输出转向到指定的其他文件中。
1. sed ‘1,4d’ file
意思:把第一行到第四行之间的数据删除,剩下的显示出来。d是sed的删除命令。
2. sed ‘/La/d’ file
意思:把含有La的行删除,剩下的显示出来。//表示搜索。
3. sed ‘/[0-9]{3}/d’ filename
意思:把含有连续3个数字的行删除。
4. sed ‘/^$/d’
意思:删除空白行。
5. sed ‘/La/!d’ file
意思:把不含有La的行删除,!表示不匹配则执行命令。
6. sed -n ‘/La/p’ file
意思:p是显示命令。把匹配的行显示出来。
7. sed ‘s/La/Oo/g’ file
意思:s是替换命令,将La替换成Oo,g表示全局替换。

单文件替换

sed ‘s/test/zcx/g’ ./test1.dat > result1.dat
意思:替换test1.dat文件中的”test”为”zcx”,将结果输出到result1.dat

多文件替换

grep “test” -rl ./* | xargs sed -i ‘s/test/zhaochaoxing/g’
意思:grep搜索含有字符串”test”的文件,然后对每个文件执行sed命令。xargs存在的意义是避免因grep到的文件过多处理不了时造成溢出。sed -i 表示就地处理,将结果存回原文件。