Я пытаюсь заменить некоторый текст другим текстом в конфигурационном файле. Я создал сценарий с sed
команда, но я получаю ошибку.
Исходная строка:
<property name="encryptData">false</property>
Новая строка:
<property name="encryptData">true</property>
Команда:
sed -i -e 's/<property name="encryptData">false</property>/<property name="encryptData">true</property>/g' /Users/User/Desktop/mirth.cfg
Ошибка:
sed: 1: "s/<property name="encry ...": bad flag in substitute command: '<'
Команда почти прекрасна. Ваша проблема состоит в том, что необходимо предшествовать наклонной черте в </property>
с обратной косой чертой \
как это.
sed -i -e 's/<property name="encryptData">false<\/property>/<property name="encryptData">true<\/property>/g' /Users/User/Desktop/mirth.cfg
Наблюдаемый я сделал это для обоих случаев.
Таким образом sed будет знать, что эта наклонная черта является частью потока и не частью команды'.
Hope это устраняет Вашу проблему.
Поскольку шаблон, который Вы ищете, содержит /
, измените разграниченный для sed
синтаксис команды замены. Например, можно использовать _
и также использовать группировку шаблона так, чтобы можно было использовать ссылку спины в замене:
sed -r 's_(<property name="encryptData">)false(</property>)_\1true\2_' /Users/User/Desktop/mirth.cfg
Также это всегда - хорошая идея взять резервное копирование при использовании -i
опция:
sed -ri.bak 's_(<property name="encryptData">)false(</property>)_\1true\2_' /Users/User/Desktop/mirth.cfg
Теперь исходный файл будет сохранен как /Users/User/Desktop/mirth.cfg.bak
, и измененный файл будет /Users/User/Desktop/mirth.cfg
.