Я знаю, что об этом уже спрашивали, но я изо всех сил пытаюсь определить основную причину ошибки в моем скрипте. Я ответил на другие вопросы и попытался преобразовать это (переключил / \ на @), но он просто не 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
Надеюсь, что это поможет