\fto znak kanału informacyjnego w Perlu. Wygląda na to, że te zniekształcone pliki zostały utworzone przez kogoś nowego zarówno w Perlu, jak i XML.
Oto poprawka o wiele bardziej precyzyjna - która również spełnia cele PO dotyczące zautomatyzowania aktualizacji wszystkich plików, w przeciwieństwie do akceptowanej odpowiedzi z sed, która będzie działać tylko na jednym pliku na raz, ponieważ nie jest sparowany find.
\fmożna po prostu zastosować sam zamiast kodu szesnastkowego x0c.
find . -type f -exec perl -pi.bkp -e 's [ \f ilename ][ /f ilename ]gx' {} \;
Tutaj dodałem -type fdo tel, aby zwracał findtylko zwykłe pliki - w przeciwnym razie findpowróci .na listę i wyśle ostrzeżenie, gdy spróbujesz go edytować, chociaż wszystko inne nadal będzie działać.
Uczyniłem też wyrażenie regularne łatwiejszym, używając xflagi, która ignoruje prawdziwe białe znaki, pozwalając na rozmieszczenie elementów wyrażenia regularnego. Jeśli ci się nie podoba, tutaj jest bez:
find . -type f -exec perl -pi.bkp -e 's[\filename][/filename]g' {} \;
I w prawdopodobnym przypadku, gdy wszystkie znaki wysuwu formularza są fałszywe i wszystkie powinny zostać zastąpione /f, możesz jeszcze bardziej odchylić linijkę:
find . -type f -exec perl -pi.bkp -e 's[\f][/f]g' {} \;
Nie musisz używać ukośników, aby otoczyć elementy polecenia podstawienia wyrażenia regularnego ( s///) w Perlu. Możesz użyć dowolnego symbolu. Jeśli jednak zdecydujesz się na użycie dowolnego sparowanego symbolu przypominającego nawias klamrowy, musisz użyć ich obu: s[old][new]na przykład.
Ponieważ nie używam ukośników, nie muszę uciekać żadnym ukośnikom.
Jeśli chodzi o -i.bkp: perl -pi -epozwala edytować w miejscu - ale jeśli potrzebujesz dodatkowego ubezpieczenia na wypadek, gdyby Twój program Perl znalazł i zamienił źle, możesz umieścić rozszerzenie pliku, aby utworzyło kopię oryginalnych plików dla ty. Tutaj wykorzystałem .bkp.
W najnowszych wersjach Perla edycja lokalna została zaktualizowana, aby była bardziej odporna na wypadek poważnych problemów z systemem, takich jak utrata zasilania lub brak miejsca na dysku. Oto autor Perla, brian d foy, na temat ulepszonej edycji na miejscu w najnowszym Perlu.
Należy wziąć pod uwagę przy użyciu Perl dla tego rodzaju zadań, ponieważ jest to bardzo potężne, ale pod oceniane językiem programowania ogólnego przeznaczenia, którego jednym z celów było oryginalne wzornictwo zastąpić sedi awkcoś znacznie lepiej.
Regex możliwości dopasowywania Perl 5'S i ulepszona składni regex znacznie przekraczają te sed, awki rzeczywiście każdy inny język programowania oprócz Perl 6, dzięki czemu Perl najbardziej rozsądny wybór zarówno dla prostych, jak i zaawansowanych manipulacji regex.
Wyjaśnienie: sedbędzie również działało OK findi możesz również użyć sed -i.bkpdo wykonania kopii zapasowej każdego edytowanego pliku, ale o ile wiem, nie ma dodatkowej odporności w Perlu 5.28 i nowszych. Wykorzystuje również bardziej skomplikowaną i znacznie mniej wydajną tradycyjną składnię wyrażeń regularnych UNIX ®.
<\filename>zamiast</filename>w kontekście, który\fbyłby interpretowany jako znak w formularzu. Prawdopodobnie powinieneś wyśledzić źródło tych plików i zwrócić uwagę programisty na problem z ich narzędziem do generowania. W przypadku naprawy plików zaakceptowana odpowiedź jest w porządku.