我知道以前有人问过这个问题,但我正在努力确定我的脚本错误的根本原因。我已经解决了其他问题并尝试转换它(将 /\ 切换为 @),但它对我不起作用,我仍然遇到相同的错误???
一旦我添加了最后 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' 的未知选项
但我看不到如何解决这个问题,有人可以帮我吗??
提前致谢..
在 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)
希望有帮助
| 归档时间: |
|
| 查看次数: |
8460 次 |
| 最近记录: |