Измените конец нескольких похожих имен файлов [дубликат]

Если вводится XML, то лучше всего использовать специальный инструмент XML.

Метод 1

Одним из способов включения / в регулярное выражение sed является экранирование его обратной косой чертой:

$ sed -ne '/<Model500>/,/<\/Model500>/p' file.txt
<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

Выражение / /, / <\ / Model500> / определяет диапазон строк. Диапазон начинается со строки, соответствующей , и заканчивается строкой, соответствующей <\ / Model500> . Поскольку мы указываем диапазон, а не заменяющую команду, выражение не начинается с s .

Метод 2

Если вы не хотите его экранировать, вы можете использовать другой разделитель:

$ sed -ne '\|<Model500>|,\|</Model500>|p' file.txt
<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

Здесь мы использовали | в качестве разделителя. Чтобы сигнализировать, что в диапазоне используется разделитель, отличный от / , следует экранировать первый разделитель: \ | .

2
21.04.2017, 16:48
2 ответа

Если у вас есть Perl rename, это так же просто, как

rename 's/\?referredby=rss//' ./*referredby=rss

С util-linux rename:

rename '?referredby=rss' '' ./*referredby=rss
6
27.01.2020, 21:51

Помимо экранирования ? (который имеет особое значение в выражениях glob), это действительно не отличается от переименования любых других файлов: так, например, вы можете использовать простой цикл оболочки

for f in *.mp3\?referredby=rss; do mv -- "$f" "${f%\?*}"; done

, где $ {f% \? *} - это расширение параметра оболочки, которое удаляет кратчайший конечный элемент, соответствующий \? *

2
27.01.2020, 21:51

Теги

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