Linux 使用sed搜索和替换字符串

Linux 使用sed搜索和替换字符串,linux,bash,sed,Linux,Bash,Sed,我有一个sed命令,用于在文件中搜索和替换字符串: sed -i -e 's/`db1`./`db2`./g' result/files1.sql 在:result/files1.sql文件中,将db1替换为db2工作正常 但是,当我将其更改为bash和variable格式时,它不起作用 sed -i -e "s/`${mydbname}`./`${mydbname2}`./g" "${mypath}" 我得到的错误如下: ./mycoolscript: line 241: db1: com

我有一个sed命令,用于在文件中搜索和替换字符串:

sed -i -e 's/`db1`./`db2`./g' result/files1.sql
在:result/files1.sql文件中,将db1替换为db2工作正常

但是,当我将其更改为bash和variable格式时,它不起作用

sed -i -e "s/`${mydbname}`./`${mydbname2}`./g" "${mypath}"
我得到的错误如下:

./mycoolscript: line 241: db1: command not found
./mycoolscript: line 241: db2: command not found

任何解决方案都很好。

将反勾字符转义

sed -i -e "s/\`${mydbname}\`./\`${mydbname2}\`./g" "${mypath}"

Bash将backtick中的部分视为命令,并首先执行该命令。

对backtick字符进行转义

sed -i -e "s/\`${mydbname}\`./\`${mydbname2}\`./g" "${mypath}"

Bash将backticks中的部分视为一个命令,并首先执行该命令。

如果需要替换
,则需要通过退出
。给你

sed -i -e "s/\`${mydbname}\`./\`${mydbname2}\`./g" "${mypath}"

如果您需要替换
,则需要通过退出
。给你

sed -i -e "s/\`${mydbname}\`./\`${mydbname2}\`./g" "${mypath}"
试试这个

sed -i -e "s/${mydbname}/${mydbname2}/g" "${mypath}"
试试这个

sed -i -e "s/${mydbname}/${mydbname2}/g" "${mypath}"

还有一种方法,对文本使用单引号&仅在变量/转义序列周围使用双引号

sed -i -e 's/`'"${mydbname}"'`./`'"${mydbname2}"'`./g' "${mypath}"
由于使用单引号,您不必转义特殊字符

转义特殊字符与混合使用单引号和双引号之间的权衡取决于特殊字符的数量与变量的数量


如果需要转义的字符太多且变量数量较少,我更喜欢单引号和双引号的混合。

还有一种方法,即仅在变量/转义序列周围使用单引号和双引号

sed -i -e 's/`'"${mydbname}"'`./`'"${mydbname2}"'`./g' "${mypath}"
由于使用单引号,您不必转义特殊字符

转义特殊字符与混合使用单引号和双引号之间的权衡取决于特殊字符的数量与变量的数量


如果需要转义的字符太多,变量数量较少,我更喜欢单引号和双引号的混合。

为什么需要添加`大约${mydbname}?它使第二个sed命令认为db1是一个命令,而不是要替换的字符串。请注意,shell将替换任何变量,包括“”(引号)内的
COMMAND
,但不会替换“”(单引号)内的变量。为什么需要添加`about${mydbname}?它使第二个sed命令认为db1是一个命令,而不是要替换的字符串。请注意,shell将替换任何变量,包括“
COMMAND
inside”(引号),但不会替换“”(单引号)。