Заменить символ доступа к полю указателя C на точку, используя sed

#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. Однако спасибо за совет.