Если вводится XML, то лучше всего использовать специальный инструмент XML.
Одним из способов включения /
в регулярное выражение sed является экранирование его обратной косой чертой:
$ sed -ne '/<Model500>/,/<\/Model500>/p' file.txt
<Model500>
ABC
BCD
CDE
</Model500>
<Model500>
123
234
345
</Model500>
Выражение /
определяет диапазон строк. Диапазон начинается со строки, соответствующей
, и заканчивается строкой, соответствующей <\ / Model500>
. Поскольку мы указываем диапазон, а не заменяющую команду, выражение не начинается с s
.
Если вы не хотите его экранировать, вы можете использовать другой разделитель:
$ sed -ne '\|<Model500>|,\|</Model500>|p' file.txt
<Model500>
ABC
BCD
CDE
</Model500>
<Model500>
123
234
345
</Model500>
Здесь мы использовали |
в качестве разделителя. Чтобы сигнализировать, что в диапазоне используется разделитель, отличный от /
, следует экранировать первый разделитель: \ |
.
Если у вас есть Perl rename
, это так же просто, как
rename 's/\?referredby=rss//' ./*referredby=rss
С util-linux
rename
:
rename '?referredby=rss' '' ./*referredby=rss
Помимо экранирования ?
(который имеет особое значение в выражениях glob), это действительно не отличается от переименования любых других файлов: так, например, вы можете использовать простой цикл оболочки
for f in *.mp3\?referredby=rss; do mv -- "$f" "${f%\?*}"; done
, где $ {f% \? *}
- это расширение параметра оболочки, которое удаляет кратчайший конечный элемент, соответствующий \? *