Найдите и замените с Bash

Я пытаюсь заменить некоторый текст другим текстом в конфигурационном файле. Я создал сценарий с 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: '<'
0
задан 13 January 2016 в 00:39

2 ответа

Команда почти прекрасна. Ваша проблема состоит в том, что необходимо предшествовать наклонной черте в </property> с обратной косой чертой \ как это.

sed -i -e 's/<property name="encryptData">false<\/property>/<property name="encryptData">true<\/property>/g' /Users/User/Desktop/mirth.cfg

Наблюдаемый я сделал это для обоих случаев.

Таким образом sed будет знать, что эта наклонная черта является частью потока и не частью команды'.

Hope это устраняет Вашу проблему.

5
ответ дан 29 September 2019 в 14:23

Поскольку шаблон, который Вы ищете, содержит /, измените разграниченный для 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.

1
ответ дан 29 September 2019 в 14:23

Другие вопросы по тегам:

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