\fявляется символом подачи формы в Perl. Похоже, что эти искаженные файлы были созданы кем-то новым для Perl и XML.
Вот большое исправление Perlier, которое также отвечает задачам OP по автоматизации обновления всех файлов, в отличие от принятого ответа с помощью sed, который будет работать только с одним файлом за раз, поскольку он не связан с парой find.
\fможно просто использовать самому вместо шестнадцатеричного кода x0c.
find . -type f -exec perl -pi.bkp -e 's [ \f ilename ][ /f ilename ]gx' {} \;
Здесь я добавил -type fв tel findтолько возврат простых файлов - в противном случае findон вернется .в список и вызовет предупреждение при попытке его редактирования, хотя все остальное будет работать.
Я также сделал регулярное выражение более легким для просмотра, используя xфлаг, который игнорирует реальные пробелы, позволяя вам выделить элементы вашего регулярного выражения. Если вам не нравится это, вот это без:
find . -type f -exec perl -pi.bkp -e 's[\filename][/filename]g' {} \;
И в вероятном случае, когда все символы подачи формы являются ложными, и все они должны быть заменены /f, то вы можете еще больше уменьшить размер строки:
find . -type f -exec perl -pi.bkp -e 's[\f][/f]g' {} \;
Вам не нужно использовать косую черту, чтобы окружить элементы команды подстановки регулярных выражений ( s///) в Perl. Вы можете использовать любой символ. Однако, если вы решите использовать любой вид парного символа в скобках, вам придется использовать оба из них: s[old][new]например.
Поскольку я не использую косые черты, мне не нужно избегать косых черт.
Что касается -i.bkp: perl -pi -eпозволяет редактировать на месте - но если вам нужна дополнительная страховка на случай, если вы неправильно установили Perl-программу поиска, вы можете добавить расширение файла, чтобы оно сделало копию исходных файлов для вы. Здесь я использовал .bkp.
В самых последних версиях Perl редактирование на месте было обновлено, чтобы сделать его более устойчивым на случай, если ваша система также столкнется с серьезной проблемой, такой как потеря питания или нехватка дискового пространства. Вот автор Perl Брайан Д. Фой о улучшенном редактировании на месте в последних версиях Perls.
Вы должны рассмотреть возможность использования Perl для этих видов задач, потому что это чрезвычайно мощные , но недооцененным языком программирования общего назначения, один из которых оригинального дизайна цель был заменить sedи awkс чем - то гораздо лучше.
Возможности сопоставления регулярных выражений в Perl 5 и улучшенный синтаксис регулярных выражений намного превосходят возможности sed, awkи даже любой другой язык программирования, кроме Perl 6, что делает Perl наиболее разумным выбором как для простых, так и для расширенных манипуляций с регулярными выражениями.
Чтобы уточнить: sedс ним findтоже будет хорошо, и вы также можете использовать его sed -i.bkpдля создания резервной копии каждого отредактированного файла, но, насколько я знаю, он не имеет дополнительной устойчивости в Perl 5.28 и выше. Он также использует более грубый и гораздо менее мощный традиционный синтаксис регулярных выражений UNIX ®.
<\filename>вместо того, чтобы</filename>в контексте, где\fбудет интерпретироваться как символ подачи формы. Вам, вероятно, следует отследить источник этих файлов и указать разработчику на проблему с их инструментом генерации. Для исправления файлов, принятый ответ просто отлично.