sed 命令返回“sed:替换表达式中的错误选项”

Vis*_*air 0 linux script bash sed command-line

例如:- 我有一个名为 file.txt 的文件

$ cat file.txt
$key
Run Code Online (Sandbox Code Playgroud)

我有一个环境变量,例如:文本文件中的 $key

让我们说 $key = 1234,所以我可以用下面的命令替换该值

sed -i 's/$key/'"$key"'/' file.txt 
Run Code Online (Sandbox Code Playgroud)

它变成

$ cat file.txt
1234
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果值

$key = 1/2/3/4
Run Code Online (Sandbox Code Playgroud)

我无法运行以下命令

sed -i 's/$key/'"$key"'/' file.txt  
Run Code Online (Sandbox Code Playgroud)

它会报错

sed: bad option in substitution expression
Run Code Online (Sandbox Code Playgroud)

因为斜线它正在打破。我可以通过直接给出值来解决它,但我不想以这种方式使用它。

sed -i 's/$key/1\/2\/3\/4/' file.txt 
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 6

问题与sed分隔符是这样的事实有关,/并且它与$key. 要解决它,请使用另一个分隔符。例如#

$ key="1/2/3/4"
$ echo 1/2/3/4 | sed "s#$key#\"$key\"#" 
"1/2/3/4"
Run Code Online (Sandbox Code Playgroud)

或者

$ echo "hello this is 1/2/3/4 yeah" | sed "s#$key#\"$key\"#"
hello this is "1/2/3/4" yeah
Run Code Online (Sandbox Code Playgroud)

有趣的阅​​读:您可以在 sed 中使用哪些分隔符?. 剧透:几乎所有东西!