sed: -e 表达式未知选项到`s'

Jay*_*279 2 linux shell bash

我知道以前有人问过这个问题,但我正在努力确定我的脚本错误的根本原因。我已经解决了其他问题并尝试转换它(将 /\ 切换为 @),但它对我不起作用,我仍然遇到相同的错误???

一旦我添加了最后 4 个(从底部开始)表达式,我就开始出现错误,..

当我运行这个

clustername="'XXXCluster'"  
seed=xx.xxx.xxx.xx  
ip=xx.xxx.xxx.xx  
hint="/opt/cassandra/data/hints"  
data="/opt/cassandra/data/data"  
commitlog="/opt/cassandra/data/commitlog"  
cache="/opt/cassandra/data/saved_caches"  

sed -i -e "s/\(cluster_name:\).*/\1$clustername/" \  
-e "s/\(- seeds:\).*/\1$seed/" \  
-e "s/\(listen_address:\).*/\1$ip/" \  
-e "s/\(rpc_address:\).*/\1$ip/" \  
-e "s/\(broadcast_rpc_address:\).*/\1$ip/" \  
-e "s/\(hints_directory:\).*/\1$hint/" \  
-e "s/\(data_file_directory:\).*/\1$data/" \  
-e "s/\(commitlog_directory:\).*/\1$commitlog/" \  
-e "s/\(saved_caches_directory:\).*/\1$cache/" /opt/cassandra.yaml  
Run Code Online (Sandbox Code Playgroud)

我得到了这个 sed:-e 表达式 #6,字符 29:`s' 的未知选项

但我看不到如何解决这个问题,有人可以帮我吗??

提前致谢..

iam*_*eko 6

在 sed 中使用 % 而不是 / 。

sed -e 's%search_string%replace_with%'

我猜你的问题行里面有斜线,sed 会与它斗争。

编辑:

由于您使用的是替换字符串的变量,因此您的斜线很重要。

我的第一个答案有点误导。对不起。

例子:

我们有一个文件 nada.txt,内容为“测试:“/a/place/in/universe””

$ cat nada.txt
test: "/a/place/in/universe"
Run Code Online (Sandbox Code Playgroud)

带有替换目录的变量

$ dir="/new/place/in/haven"
$ echo $dir
/new/place/in/haven
Run Code Online (Sandbox Code Playgroud)

让我们尝试失败

$ sed -e "s/\(test: \).*/\1$dir/" nada.txt
sed: -e expression #1, char 19: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)

再次但这次用 % 替换斜线(“s///”到“s%%%”)

$ sed -e "s%\(test: \).*%\1$dir%" nada.txt
test: /new/place/in/haven
Run Code Online (Sandbox Code Playgroud)

或者

$ sed -e 's%\(test: \).*%\1'$dir'%' nada.txt
test: /new/place/in/haven
Run Code Online (Sandbox Code Playgroud)

看单引号,需要四个才能取出变量。看起来像这样 's% %'$dir'%' 因为在 shell 上下文中单引号不会解析变量:

$ echo 'Such a text and $dir'
Such a text and $dir
Run Code Online (Sandbox Code Playgroud)

双引号按预期完成工作的地方。

$ echo "Such a text and $dir"
Such a text and /new/place/in/haven 
Run Code Online (Sandbox Code Playgroud)

希望有帮助

  • 无需猜测。输入中是否有任何 `/` 字符并不重要。替换字符串中有 `/` 字符确实很重要。问题确实列出了替换字符串。 (2认同)