Я знаю, что об этом уже спрашивали, но я изо всех сил пытаюсь определить основную причину ошибки в моем скрипте. Я рассмотрел другие вопросы и попытался преобразовать это (переключил / \ на @), но у меня это просто не работает, я все еще получаю ту же ошибку ???
Как только я добавил последние 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 с содержимым 'test: "/ a / place / in / universe"'
$ cat nada.txt
test: "/a/place/in/universe"
Переменная с каталогом для замены
$ dir="/new/place/in/haven"
$ echo $dir
/new/place/in/haven
Попробуем потерпеть неудачу
$ sed -e "s/\(test: \).*/\1$dir/" nada.txt
sed: -e expression #1, char 19: unknown option to `s'
Опять же, но на этот раз с замененными косыми чертами на% (от "s ///" до "s %%%")
$ sed -e "s%\(test: \).*%\1$dir%" nada.txt
test: /new/place/in/haven
Или
$ sed -e 's%\(test: \).*%\1'$dir'%' nada.txt
test: /new/place/in/haven
Посмотрите на одинарные кавычки, вам нужно четыре, чтобы вынуть переменную. Похоже, это 's%%' $ dir '%' Потому что в контексте оболочки одинарные кавычки не разрешают переменную:
$ echo 'Such a text and $dir'
Such a text and $dir
Где двойные кавычки работают так, как ожидалось.
$ echo "Such a text and $dir"
Such a text and /new/place/in/haven
надеюсь, это поможет