Mój przyjaciel wskazuje, że jeśli to zrobisz:
perl -pi.bak -e 's/foo/bar/' somefile
kiedy „somefile” jest w rzeczywistości dowiązaniem symbolicznym, perl robi to, co mówią doktorzy:
Robi to poprzez zmianę nazwy pliku wejściowego, otwarcie pliku wyjściowego pod oryginalną nazwą i wybranie tego pliku wyjściowego jako domyślnego dla instrukcji print (). Rozszerzenie, jeśli jest dostarczone, służy do modyfikacji nazwy starego pliku w celu utworzenia kopii zapasowej [...]
W rezultacie powstaje nowe dowiązanie symboliczne „somefile.bak” wskazujące na niezmieniony plik rzeczywisty oraz nowy, zmieniony zwykły plik „somefile” ze zmianami.
W wielu przypadkach podążanie za dowiązaniem symbolicznym byłoby pożądanym zachowaniem (nawet jeśli pozostawia ono niejednoznaczną prawidłową lokalizację pliku .bak). Czy istnieje prosty sposób, aby to zrobić inaczej niż testowanie dowiązań symbolicznych w opakowaniu i odpowiednia obsługa sprawy?
( sed
robi to samo, za co jest tego warte.)
-p -i
skryptu.