如何用sed 递归替换目录下所有文件的内容(包含子目录)
时间: 2024-03-20 11:45:19 浏览: 339
可以使用以下命令来递归替换目录下所有文件的内容:
```
find /path/to/directory -type f -exec sed -i 's/old_string/new_string/g' {} +
```
其中,`/path/to/directory` 是要替换的目录路径,`old_string` 是要被替换的字符串,`new_string` 是要替换成的新字符串。`-type f` 表示只替换文件,不替换目录。`-exec` 表示对找到的每个文件执行后面的命令,`{}` 表示找到的文件名,`+` 表示在一次命令中处理尽可能多的文件。
注意,这个命令会直接修改原文件内容,请谨慎使用。如果想要备份原文件,可以在执行命令前先复制一份。
相关问题
使用sed命令将当前目录下及子目录下的所有文件中的rst修改为rstn
使用sed命令修改文件内容,尤其是在子目录下递归地进行,通常需要借助其他命令如`find`或`xargs`。一个可能的解决方案是先使用`find`命令查找所有文件,然后使用`xargs`将这些文件作为参数传递给`sed`命令。下面是一个基本的命令行示例:
```bash
find . -type f -exec sed -i 's/rst/rstn/g' {} +
```
这里的命令解释如下:
- `find . -type f`:在当前目录(`.`)及其所有子目录中查找所有的文件(`-type f`表示文件类型)。
- `-exec ... {} +`:对于`find`命令找到的每个文件执行后面的命令。`{}`是一个占位符,代表当前找到的文件名,`+`表示尽可能多地将文件名合并到一起执行一次命令,这样可以减少`sed`命令的调用次数,提高效率。
- `sed -i 's/rst/rstn/g'`:使用sed进行替换操作。`-i`选项表示直接修改文件内容,`'s/rst/rstn/g'`是一个sed的替换表达式,表示将所有的`rst`替换为`rstn`,`g`标志表示全局替换。
请注意,在执行这样的命令之前,最好先备份你的文件,以防不小心覆盖或破坏了重要数据。
递归替换替换/home/daas目录下的.sh和.conf和.config和.properties文件的指定字符串
可以使用递归遍历目录的方式,找到所有符合条件的文件,并对其中的字符串进行替换。下面是一个可能的实现:
```bash
#!/bin/bash
# 要替换的字符串和替换后的字符串
FIND_STR="old_string"
REPLACE_STR="new_string"
# 递归遍历目录并替换指定类型的文件中的字符串
function replace_in_files {
for file in "$1"/*; do
if [[ -d "$file" ]]; then
replace_in_files "$file"
elif [[ -f "$file" ]]; then
if [[ "$file" == *.sh || "$file" == *.conf || "$file" == *.config || "$file" == *.properties ]]; then
sed -i "s/$FIND_STR/$REPLACE_STR/g" "$file"
fi
fi
done
}
# 从指定目录开始遍历
replace_in_files "/home/daas"
```
这个脚本会递归地遍历 `/home/daas` 目录下的所有文件和子目录。对于每个找到的文件,如果它是 `.sh`、`.conf`、`.config` 或 `.properties` 类型的文件,就使用 `sed` 命令进行替换。注意,替换操作是在原文件上进行的,因此要谨慎操作。
阅读全文