Назад | Перейти на главную страницу

sed: -e выражение неизвестная опция для `s '

Я знаю, что об этом уже спрашивали, но я изо всех сил пытаюсь определить основную причину ошибки в моем скрипте. Я рассмотрел другие вопросы и попытался преобразовать это (переключил / \ на @), но у меня это просто не работает, я все еще получаю ту же ошибку ???

Как только я добавил последние 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 

надеюсь, это поможет