Использование 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 заменяет все вхождения, а не только первое вхождение?
  • Проблема декодирования вывода регулярного выражения {m, n} в sed
  • Как удалить определенную строку и следующую пустую строку с помощью GNU sed?
  • Как заменить строку на abc \\ efg [255 с помощью abc \\ efg [23 с помощью sed
  • sed в формате csv
  • Как удалить пустые комментарии с помощью sed?
  • Удалите и замените две конкретные строки с помощью команды sed
  • sed редактировать текстовый блок: не жадный матч
  • Печать строки между шаблоном с помощью sed
  • Можно ли передавать аргументы в сценарий sed?
  • Вербальное считывание регулярных выражений sed в квадратных скобках, звездочка вне скобок
  • Linux и Unix - лучшая ОС в мире.