Pada kesempatan tertentu kami ingin mengganti teks di dalam file, misalnya, perubahan Document.txt segala sesuatu yang dikatakan "keluarga saya" untuk "kita". Untuk mencapai ini, kita dapat menggunakan editor teks pilihan kita (Kate, Gedit, SublimeText, dll) tetapi selalu baik untuk mengetahui variannya, cara lain untuk mencapai hasil yang sama
Itu terjadi dengan ekspresi reguler ini dapat dicapai, perintah sed sangat bagus, memiliki varian dan opsi yang tak ada habisnya tetapi ... bagi mereka yang hanya ingin mengganti teks dari cara yang paling tidak rumit, bagi mereka, saya menghadirkan varian yang jauh lebih sederhana ini:
Mengikuti contoh, kami memiliki file Document.txt berlokasi di $ HOME / Document.txt dengan teks berikut:
(...) keluarga saya Ini seperti semuanya, seperti milik Anda atau tetangga Anda. Faktanya keluarga saya Kami mencoba untuk menjadi orang yang bertanggung jawab dan di mata masyarakat, secara politis dan sosial benar. Namun, di rumah saya ada kambing hitam, dan itulah peran saya LOL!. Saya selalu menjadi orang yang tidak takut untuk mengatakan apa yang dia pikirkan (meskipun tampaknya tidak benar di mata masyarakat), meskipun pada kenyataannya keluarga saya sudah muak dengan
kotoranmasyarakat saat ini.
Dengan perintah berikut, Anda akan mengubah «keluarga saya" oleh "kita":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Sesederhana itu 🙂
Jadi teksnya adalah:
(...) kita Ini seperti semuanya, seperti milik Anda atau tetangga Anda. Faktanya kita Kami mencoba untuk menjadi orang yang bertanggung jawab dan di mata masyarakat, secara politis dan sosial benar. Namun, di rumah saya ada kambing hitam, dan itulah peran saya LOL!. Saya selalu menjadi orang yang tidak takut untuk mengatakan apa yang dia pikirkan (meskipun tampaknya tidak benar di mata masyarakat), meskipun pada kenyataannya keluarga saya sudah muak dengan
kotoranmasyarakat 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 agak rumit, mari kita uraikan sedikit dan jelaskan sedikit 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 Memulai 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 jauh lebih luas daripada yang diperlukan untuk perintah, cukup sederhana untuk dipahami 🙂
Perl lebih dari sekadar cara untuk mengganti teks, ia adalah bahasa lengkap 😉
Jika Anda ingin mempelajarinya lebih lanjut, instal paketnya perl-doc dan lihat whooodo apa yang memungkinkan, itu hanya alam semesta 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 dengan varian kedua ini adalah tidak akan menggantikan dalam file yang ada di subfolder 🙂
Bagaimanapun, saya harap Anda menganggapnya menarik. Bagi saya ini sangat berguna, saya sudah bisa mengganti teks langsung dari terminal ... bagus! 😀
Yah, saya pikir banyak dari kita di sini tahu perintah sed, yang melayani tujuan yang sama, itu jauh lebih baik dan lebih mudah digunakan ...
Terima kasih atas komentar Anda,
Hanya dua detail, mengapa Anda mengatakan bahwa sed membuatnya lebih baik? Apakah benar-benar lebih mudah digunakan dengan begitu banyak karakter 'aneh'?
Salam untuk semua!!!. Saya telah menggunakan perintah sed, dan metode yang dijelaskan di sini dengan perl lebih sederhana. Terima kasih KZKG ^ Gaara !!!.
Terima kasih atas komentarnya 🙂
Setidaknya menurut saya ini lebih sederhana daripada ekspresi biasa ... bahwa dengan begitu banyak karakter 'aneh', sesuatu yang sangat kompleks untuk dipahami dan dipelajari dapat dilakukan kepada mereka yang tidak paham.
Ada pepatah "lama" di luar sana: "Saya punya masalah, saya memutuskan untuk menggunakan Ekspresi Reguler ... sekarang saya punya DUA masalah" 😉
HAHAHAHAHAHAHA !!!
Ekspresi reguler dapat menyelamatkan hidup kita pada titik tertentu ... ya, butuh waktu lama untuk mempelajari cara menggunakannya dan tidak mati saat mencoba.
Jika saya tahu perintah ini bertahun-tahun yang lalu, Tuhan !! betapa sederhananya hidupku 😀
Bersih! Ditangani dengan baik, mereka sangat kuat 🙂 Tidak ada yang lebih baik untuk memanipulasi teks. Tapi terkadang, seperti yang Anda katakan dalam kasus Perl ini, Anda tidak perlu melangkah sejauh itu jika penggantian sudah cukup.
Saya akan tetap menggunakan Python :)
Tetapi dalam kehausan saya melihatnya lebih sederhana ... apakah saya melakukan sesuatu yang salah?
sed -i "if / what-I-want-to-change / new-to-put /" file-in-which-to-replace
heh heh ... dan kalo gw mau ganti "http://my.blog.com/content/" dengan "http://my.blog.com/uploads/files/" 😀 ... sudah ada kamu punya untuk menempatkan \ dengan spasi dan lainnya, dan itu menjadi kompleks atau tidak?
Tidak wajib menggunakan / sebagai pemisah. Lihat dengan +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» file
O_O… WTF!
Anda telah membuka banyak pilihan untuk saya sekarang .. O_O
Saya suka posting ini di mana kita semua belajar sesuatu 🙂
Saya juga tidak tahu itu.
Saya lebih suka menggunakan langsung vi ..
Sesederhana:
:% s / us / keluarga saya / g
% -> seluruh dokumen
s -> cari
g -> semua kejadian
Salam ..
Gracias!
Saya tidak tahu bagaimana melakukannya dengan vi
Ditambahkan ke favorit!
Gracias!
Lihatlah jika Anda memiliki sedikit perintah rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Entri hebat! Jika ada yang tertarik, hal yang sama dengan perintah sed Linux: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
Dan apa yang terjadi jika di dalam file yang ingin saya ganti memiliki tanda kutip?
Contoh mengganti apa yang mengatakan teks: »1 ″ dengan teks:» 2 ″
bagaimana perintahnya?
Halo
Saya ingin mengganti string yang memiliki @ di tengah dan hanya mengubah teks menjadi sebelum tanda di.
teks yang berubah: Hidup Peru
teks baru: Viva mi patria @percysalgado
Tampil: Hidup tanah air saya
Terima kasih atas bantuan Anda
"\" Anda harus menggunakan garis miring sebelum karakter dengan penggunaan ganda @, #, sehingga ditafsirkan sebagai teks.
Dan bagaimana cara melakukannya di windows ????