Использование sed со специальными символами

У меня есть каталог, полный XML-файлов, которые выглядят так, для чего я хочу изменить значение числа «смещения» от 1 до некоторого другого номера

$ cat my.xml <offset xmlns="">1</offset> 

Я написал различные комбинации этой команды sed, но ничего, что я пробовал, запускается без ошибок. Я уверен, что мне нужно сбежать от некоторых персонажей, но те, которые я пробовал, всегда заканчиваются ошибками («неожиданный токен», «неизвестный вариант» и т. Д.). Я также пробовал без флага -e, поскольку это действительно не выражение.

 sed -i -es/<offset xmlns="">1</offset>/<offset xmlns="">99</offset>/ *.xml 

Любая помощь будет оценена по достоинству.

5 Solutions collect form web for “Использование sed со специальными символами”

Попробуй это,

 $ sed 's~<offset xmlns="">1~<offset xmlns="">99~g' file <offset xmlns="">99</offset> 

Используйте другой разделитель sed, если ввод содержит слэши.

Вам не нужно использовать / in sed, вы можете использовать запятую, например:

 sed -i 's,<offset xmlns="">1</offset>,NEW_TEXT,' FILE 

Обычно вам не требуется все это в самой функции s/earch/replace/ function, и может вместо этого сначала /address/ then условно /s/// . Это может не только помочь с удобочитаемостью и избежать некоторых из упомянутых вами проблем, но также может быть и увеличение производительности:

 sed '/offset xmlns=/s/>1</>99</' 

Используйте правильный парсер для файлов XML. Например, я бы использовал xsh и использовал следующий скрипт:

 for my $file in { @ARGV } { open $file ; for //offset set . 1 ; save :b ; } 

Я бы заменил 17-й символ строки, которая содержит значение:

 sed -i 's/^\(.\{17\}\)./\1VALUE/' file.xml 

Замените VALUE новым значением для <offset> . Например.

 sed -i 's/^\(.\{17\}\)./\18/' file.xml 

чтобы изменить его на 8.

  • Sed: Ищите IP-адрес между диапазонами?
  • Что делает sed -i '1d'?
  • Поиск и замена предложения с помощью пробелов с помощью команды sed
  • sed редактировать текстовый блок: не жадный матч
  • Как работает sed 's / / \ / g'
  • Удаление второго и последнего символов в каждой строке - с помощью sed
  • Как отредактировать следующую строку после шаблона с помощью sed?
  • Что случилось с этой командой sed?
  • Sed удаляет все начальные совпадения шаблонов из строки
  • Что это за команда sed?
  • команда sed оставить два десятичных знака и удалить остальные после запятой
  • Linux и Unix - лучшая ОС в мире.