\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 Браян d foy щодо вдосконаленого редагування на місці в останніх Perls.
Вам слід подумати про використання Perl для подібних завдань, оскільки це надзвичайно потужна, але недооцінена мова програмування загального призначення, однією з оригінальних цілей дизайну якої була заміна sedта awkщось набагато краще.
Можливості відповідності регулярних виразів Perl 5 та вдосконалений синтаксис регулярних виразів значно перевищують можливості sed, awkта й справді будь-якої іншої мови програмування, крім Perl 6, що робить Perl найбільш розумним вибором як для простих, так і просунутих маніпуляцій з регулярними виразками.
Для уточнення: sedбуде працювати добре з findзанадто, і ви також можете використовувати sed -i.bkpрезервну копію кожного редагованого файлу, але, наскільки я знаю, він не має додаткової стійкості в Perl 5.28 і вище. Він також використовує незграбний і набагато менш потужний традиційний синтаксис регулярного зворотного виразів UNIX ®.
<\filename>замість цього</filename>контексту, де\fінтерпретувався як символ подачі форми. Вам, мабуть, слід знайти джерело цих файлів і вказати на проблему з їх генераційним інструментом розробнику. Для виправлення файлів прийнята відповідь просто чудова.