有时需要对目录下的多个文件中的字符串进行替换,如果手动逐个替换既费时又容易漏掉。此时可通过sed命令对指定目录下的所有文件进行操作。
假如将命令写在一个sh文件中,名字为replace_string_in_all_files.sh,接受三个参数:第一个参数指定要操作的目录;第二个参数指定文件中的要替换的字符串;第三个参数指定替换后的字符串,如:
./replace_string_in_all_files.sh src csdn github
第一种方式通过for,如下所示:
for file_name in $(find $1 -type f -name "*"); do
#echo "file name: ${file_name}"
sed -i "s/$2/$3/g" ${file_name}
done
第二种方式,可通过exec将第一种方式写在一条语句中,如下:
find $1 -type f -name "*" -exec sed -i "s/$2/$3/g" {} \;
第三种方式,也可通过xargs写在一条语句中,如下:
find $1 -type f -name "*" | xargs sed -i "s/$2/$3/g"
注意: 如果需要替换的源字符串或目的字符串中包含反斜杠、星号、单引号等特殊字符,则需要使用另一个反斜杠(\)对其进行转义。如果连续有多个特殊字符,则需要分别转义每个字符。如将src目录下的所有文件中的#include <opencv/core.hpp>替换为#include <opencv2/highgui.hpp>,则执行以下命令:
find src -type f -name "*" | xargs sed -i "s/opencv\/core/opencv2\/highgui/g"
本文介绍了如何使用Linux的sed命令在指定目录下的所有文件中批量替换特定字符串。提供了三种不同的实现方式:通过for循环、exec和xargs。详细展示了替换操作的命令行示例,并提醒注意特殊字符的转义。适用于需要批量处理文件内容的场景。
7万+

被折叠的 条评论
为什么被折叠?



