我知道以前有人问过这个问题,但我正在努力确定我的脚本错误的根本原因。我已经完成了其他问题并尝试转换它(将/\切换为@)但它对我不起作用我仍然得到同样的错误???
一旦我添加了最后 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
我得到这个 sed: -e 表达式 #6, char 29: `s' 的未知选项
但我看不到如何解决这个问题,有人可以帮我吗?
提前致谢..
在 sed 中使用 % 而不是 /。
sed -e 's%search_string%replace_with%'
我猜你的问题行中有斜线,sed 会与之斗争。
编辑:
由于您将变量用于替换字符串,因此您的斜线很重要。
我的第一个答案有点误导。对此感到抱歉。
例子:
我们有一个文件 nada.txt,内容为“测试:“/a/place/in/universe””
带有替换目录的变量
让我们尝试失败
再次但这次用 % 替换斜杠(“s///”到“s%%%”)
或者
看单引号,需要四个才能取出变量。看起来像这样 's% %'$dir'%' 因为在 shell 上下文中单引号不会解析变量:
双引号可以按预期完成工作。
希望有帮助