获得徽章 0
- 一次性替换多个文件中的指定字符串
假设有三个文本文件,file1.txt,file2.txt,file3.txt,我想把这三个文本文件中的「good」替换成「nice」,可以用这个命令:
sed -i '.bak' 's/good/nice/g' file1.txt file2.txt file3.txt
其中,「'.bak'」是指定备份文件的后缀名,为了防止误操作,sed 要求修改文件内容时要备份,如果不想备份,可以用空字符串代替「'.bak'」,即:
sed -i '' 's/good/nice/g' file1.txt file2.txt file3.txt
s 前面可以指定行号,从而实现对文件局部的修改。比如「2,8s/good/nice/g」就是只把第 2 行到第 8 行的 good 替换成 nice。还有另外几种方式指定行号,见图一。如果把最后面那个「g」去掉,就只会替换每行中第一次出现的 good。
其实 s 命令是匹配正则表达式并替换,所以可以用「s/a\db/nice」将匹配到「a\db」的字符串都替换成 nice。
最后的文件列表,也可以用通配符匹配,比如把「file1.txt file2.txt file3.txt」改成「 *.txt」,就是替换所有以「.txt」结尾的文件中的内容。展开评论1