shell 替换字符串 ,这个代码怎么改才对?sed -i "s/${old_arr[$i]}/${new_arr[$i]}/g" "$file"
时间: 2024-05-17 11:12:52 浏览: 97
这个代码本身是可以正常工作的,但是如果原始字符串或替换字符串中包含一些特殊字符(比如 `/`),那么这个代码就会出现问题。为了避免这种情况,可以使用不同的分隔符,比如 `#`,并且对字符串进行转义,比如使用 `sed -i "s#${old_arr[$i]}#${new_arr[$i]}#g" "$file"`。
此外,如果原始字符串或替换字符串中包含变量,也需要使用双引号来包含整个 sed 命令,比如 `sed -i "s#${old_arr[$i]}#${new_arr[$i]}#g" "$file"`。
相关问题
shell 替换字符串 ,这个代码怎么改能在mac下正确执行?sed -i "s/${old_arr[$i]}/${new_arr[$i]}/g" "$file"
在 macOS 上,`sed` 命令的参数有一些不同,所以需要稍作修改。可以使用如下命令替换字符串:
```bash
sed -i '' "s|${old_arr[$i]}|${new_arr[$i]}|g" "$file"
```
需要注意的是,在 macOS 上,`sed` 命令的 `-i` 选项必须后面跟一个备份文件的后缀名,这里使用空字符串代表不备份原始文件。
另外,为了避免一些特殊字符造成的问题,这里使用了 `|` 作为分隔符,也可以使用其他字符,只要不和原始字符串或替换字符串中的字符冲突即可。
sed -i "s/${old_address}/${ip_address}/g" `grep "${old_address}" -rl $mysql_backup_dir`
这是一个使用sed命令的命令行脚本,它的作用是将指定目录下所有文件中的${old_address}替换成${ip_address}。其中,${old_address}和${ip_address}是两个变量,需要替换成实际的值。具体解释如下:
- sed命令是一种流编辑器,用于对文本流进行编辑。
- -i选项表示直接修改文件内容,而不是输出到终端。
- s命令是sed的替换命令,用于替换文本中的指定字符串。
- ${old_address}和${ip_address}是两个环境变量,分别表示需要替换的旧地址和新地址。
- `grep "${old_address}" -rl $mysql_backup_dir`是用于搜索需要替换的文件的命令,其中${old_address}是需要查找的字符串,-r选项表示递归搜索,-l选项表示只输出文件名,$mysql_backup_dir是需要搜索的目录。这个命令会将搜索结果作为sed命令的输入。
- 最后的g选项表示全局替换,即将每个匹配的字符串都替换掉,而不是只替换第一个。
阅读全文