Ganti teks di dalam file hanya dengan satu perintah: perl

Terkadang kita ingin mengganti teks di dalam sebuah file, misalnya, mengubah semua yang bertuliskan "keluarga saya" menjadi "kami" di Document.txt . Untuk melakukan ini, kita dapat menggunakan editor teks pilihan kita (Kate, Gedit, Sublime Text, dll.), tetapi selalu baik untuk mengetahui alternatif, cara lain untuk mencapai hasil yang sama.

Ternyata hal ini dapat dicapai dengan ekspresi reguler ; perintah `sed` sungguh luar biasa, memiliki variasi dan opsi yang tak terbatas, tetapi… bagi mereka yang hanya ingin mengganti teks dengan cara yang paling sederhana , saya hadirkan varian yang jauh lebih simpel ini:

Mengikuti contoh tersebut, kita memiliki file Document.txt yang terletak di $HOME/Document.txt dengan teks sebagai berikut:

Keluarga saya sama seperti keluarga lainnya, seperti keluarga Anda atau keluarga tetangga Anda. Bahkan, keluarga saya berusaha menjadi orang yang bertanggung jawab di mata masyarakat, secara politis dan sosial. Namun, ada satu "anak nakal" di rumah saya, dan itu adalah peran saya, LOL! Saya selalu menjadi orang yang tidak takut untuk mengatakan apa yang saya pikirkan (meskipun itu tidak diterima secara sosial), meskipun sebenarnya, keluarga saya sudah muak dengan masyarakat yang kacau saat ini.

Perintah berikut akan mengubah " keluarga saya " menjadi " kami ":

perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt

Sesederhana itu 

Jadi teksnya adalah:

(...) kami sama seperti keluarga lainnya, seperti keluarga Anda atau tetangga Anda. Bahkan, kami berusaha menjadi orang yang bertanggung jawab di mata masyarakat, secara politis dan sosial benar. Namun, ada satu "anak nakal" di rumah saya, dan itulah peran saya, LOL! Saya selalu menjadi orang yang tidak takut mengatakan apa yang saya pikirkan (meskipun tampaknya tidak benar di mata masyarakat), meskipun sebenarnya keluarga saya sudah muak dengan kekotoran masyarakat saat ini.

Sintaksnya adalah:

perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar

Perintahnya mungkin tampak sedikit rumit, mari kita uraikan sedikit dan jelaskan dengan lebih sederhana 

  • perl : Apa yang akan kami gunakan, perl
  • -pi : Pí, bagaimana Ï€ (nilai perkiraan 3.14)
  • -e : E membayangkannya untuk «e mengeksekusi» ^ - ^
  • Kemudian dalam tanda kutip » kami buka dengan s dan kami menutup dengan a g: "sg" …bayangkan S untuk Mulai dan G untuk Game Over 
  • Putar di antara sg kita harus meletakkan dua set tanda kurung: [] y [], menjadi seperti itu: "S [] [] g"
  • Di dalam tanda kurung pertama seperti yang saya katakan di atas, teks yang ingin kita hapus dan ganti dengan yang baru akan masuk, sedangkan di tanda kurung kedua, teks baru yang akan dimasukkan akan masuk, mengikuti contoh: "S [keluargaku] [kita] g"

Sederhana bukan?

Penjelasannya sebenarnya lebih panjang dari apa yang diperlukan untuk perintah tersebut, cukup sederhana untuk dipahami 

Perl lebih dari sekedar cara untuk mengganti teks, ini adalah keseluruhan bahasa 

Jika Anda ingin mempelajari lebih lanjut, instal paket perl-doc dan lihat semua yang ditawarkannya; ini benar-benar dunia yang berbeda.

Ngomong-ngomong dan untuk menutup, dengan asumsi Anda ingin menemukan semua file .txt yang Anda miliki di $ HOME / Documents / dan di masing-masing file ganti "my family" dengan "us", Anda dapat bergabung dengan find + perl untuk mencapai ini:

find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;

Atau menggunakan wildcard:

perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt

Masalah pada varian kedua ini adalah tidak akan menggantikan file yang ada pada subfolder 

Bagaimanapun, saya harap ini menarik bagi Anda. Bagi saya ini sangat berguna, sekarang saya dapat mengganti teks langsung dari terminal... bagus! 


Tambahkan sebagai sumber pilihan di Google