#sed #replace
#sed #замените
Вопрос:
Я пытаюсь заменить все вхождения ->
на .
. Я попробовал следующее:
sed -i s/->/./g licensewizard.cpp
Но это выдает ошибку:
sed: -e expression #1, char 3: unterminated `s' command
Я не уверен, что не так, поскольку ни -
, ни >
не нужно экранировать, если я не ошибаюсь?
Ответ №1:
Вам нужно заключить ваши команды sed в одинарные кавычки, чтобы оболочка не пыталась интерпретировать ни один из символов. В этом конкретном случае ваша оболочка интерпретировала >
символ для попытки перенаправления.
sed -i 's/->/./g' licensewizard.cpp
Комментарии:
1. Хороший вызов. Мне пришлось использовать двойные кавычки, но это означает то же самое. Спасибо.
2. @Andrej осторожно, двойные и одинарные кавычки не означают одно и то же для оболочки. Оболочка все равно будет пытаться расширяться
$
и что-либо подобное экранируетсяx
. Всегда заключайте встроенные команды в одинарные кавычки, синтаксис которых отличается от командной строки; например,sed
илиawk
в качестве примеров.3. Не работает с одинарными кавычками, но я на Windows. Однако спасибо за совет.