Linux命令之sed批量替换字符串

使用sed命令可以进行字符串的批量替换操作,以节省大量的时间成本;

将多个文件中的字符串1替换为字符串2,使用的格式如下:

sed -i "s/oldstring/newstring/g" `grep oldstring -rl /data/a/`

该组合操作的含义是递归查找/data/a/目录下面的含有oldstring字符的文件,然后将查找到的文件进行全局替换,将oldstring替换为newstring,注意两个单引号,表示执行该命令

其中,oldstring是待被替换的字符串,newstring是待替换oldstring的新字符串,grep操作主要是按照所给的路径查找oldstring,path是所替换文件的路径;

-i选项是直接在文件中替换,不在终端输出;

-r选项是所给的path中的目录递归查找;

-l选项是输出所有匹配到oldstring的文件;

实例:

1. 替换指定文件的字符串

sed -i "s/oldstring/newstring/g" filename
sed -i "s/6/sk/g" ./test01.txt

2.使用find命令替换指定文件的字符

假设你想要更改不只一个文件中而是当然目录底下所有文件中的某些字符串。你需要将若干文本文件中的wine改为champagne。

 find . -maxdepth 1 -name “*.txt” -type f -exec sed -i ’s/wine/champagne/’ {} \

我们使用find命令,也就是“find . -maxdepth 1 -name “*.txt” -type f”这部分,来获取当前目录中所有的文本文件列表。而其中的“find . maxdepth 1”部分告诉计算机只查找当前目录,而且不查找子目录的内容。'-name “*.txt”’部分代表只查找以“.txt”为后缀名的文件。然后,“-type f”部分表示只查找普通文件,而不查找目录文件之类的特殊文件。最后,“-exce”部分,代表对查找到的结果执行后面的命令。在这里,也就是对查找到的结果执行“sed -i ’s/wine/champagne/’ {} \”这个命令。(其中{}代表的是查找到的结果)

如果担心进行了错误替换,可以在-i命令后带后缀进行备份,比如:

sed -i.bak 's/202.123.23.12/localhost/g' *.xml

但应注意:替换命令后只需要有g命令,不能再加p命令。

你可能感兴趣的:(linux,linux,服务器,运维)