Seorang teman saya menunjukkan bahwa jika Anda melakukannya:
perl -pi.bak -e 's/foo/bar/' somefile
ketika "somefile" sebenarnya adalah symlink, perl melakukan apa yang akan dilakukan dokumen:
Ini dilakukan dengan mengganti nama file input, membuka file output dengan nama asli, dan memilih file output sebagai default untuk pernyataan print (). Ekstensi, jika disediakan, digunakan untuk mengubah nama file lama untuk membuat salinan cadangan [...]
Yang menghasilkan symlink baru "somefile.bak" yang menunjuk ke file nyata yang tidak berubah, dan yang baru, mengubah file biasa "somefile" dengan perubahan.
Dalam banyak kasus, mengikuti symlink akan menjadi perilaku yang diinginkan (bahkan jika itu meninggalkan lokasi yang benar dari file .bak ambigu). Apakah ada cara sederhana untuk melakukan ini selain menguji untuk symlink dalam bungkus dan menangani kasing dengan tepat?
( sed
melakukan hal yang sama, untuk apa nilainya.)
-p -i
dalam skrip Anda.