заменяя некоторый текст квадратными скобками в bash

У меня есть эта строка, которую я получаю от запуска jack_lsp .

 a2j:Arturia BeatStep [28] (capture): Arturia BeatStep MIDI 1 

в xml-файле я сохраняю состояние соединений из предыдущего сеанса подключения.

 <connection> <output>a2j:Arturia BeatStep [20] (capture): Arturia BeatStep MIDI 1</output> <input>starmaze:midi_to_slave_1</input> </connection> 

Возможно, вы заметили, что между предыдущим сеансом (сохраненным в файле xml) и текущим сеансом значение в [] (квадратные скобки) было изменено. asu такой я пытаюсь обновить значение в файле всякий раз, когда я хочу его загрузить.

Для этого у меня есть следующий фрагмент bash:

 ARTURIA_CHAN=$( jack_lsp | grep Arturia | grep capture | sed -e 's/^.*\[\(.*\)\].*$/\1/' ) ARTURIA_XMLCHAN=$( cat "${ofname}" | grep Arturia | grep capture | sed -e 's/^.*\[\(.*\)\].*$/\1/' ) if [ "${ARTURIA_CHAN}" != "${ARTURIA_XMLCHAN}" ]; then sed -e "s/\[$ARTURIA_XMLCHAN\]/\[$ARTURIA_CHAN\]/g" -i.bak1-art "${ofname}" echo "changing arturia from ${ARTURIA_XMLCHAN} to ${ARTURIA_CHAN}" fi 

ofname – это «имя выходного файла», и это в основном файл xml.

Кажется, что переменные 2 получают ожидаемые значения (что находится внутри [] ), но операция sed либо работает неправильно, либо не сохраняет файл в конце. Я не могу понять, что это правда. Возможно, это более очевидно для вас?

Спасибо.

One Solution collect form web for “заменяя некоторый текст квадратными скобками в bash”

Лучше использовать XML-парсер с выражением XPath для изменения файла XML. Один пример с xmlstarlet :

 $ xmlstarlet edit -L -u "/connection/output[contains(., "Arturia")]" -v "remplacement_string" file.xml 
  • Печать текста между двумя шаблонами, не содержащими конкретного слова
  • sed regexp HEX char
  • Поиск второй строки файлов и имена файлов для печати в stdout
  • sed match word1 и word2, чтобы получить слово между ними
  • Это хорошая идея для фильтрации ввода перед запуском awk-действия?
  • Как использовать awk или sed для преобразования строк в столбцы
  • Переформатирование отрицательных чисел с помощью sed или awk
  • как поменять текст внутри файлов
  • Необходимо вставить одинарные кавычки в текстовый файл для использования в качестве SQL-запроса с помощью sed
  • Сопоставление двух разных линий, расположенных по крайней мере на N прямых друг от друга
  • Переименуйте файлы (удалите некоторые символы, которые не всегда одинаковы)
  • Linux и Unix - лучшая ОС в мире.