sed: -e expression unknown option to `s '

Я знаю, что об этом уже спрашивали, но я изо всех сил пытаюсь определить основную причину ошибки в моем скрипте. Я ответил на другие вопросы и попытался преобразовать это (переключил / \ на @), но он просто не sed: -e выражение # 6, char 29: неизвестная опция для `s '

, но я не вижу, как это исправить, может кто-нибудь мне помочь ??

заранее спасибо ..

1
задан 23 June 2017 в 12:24
1 ответ

Используйте% вместо / в вашем 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 

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

4
ответ дан 3 December 2019 в 17:35

Теги

Похожие вопросы