Pada kesempatan tertentu kami ingin mengganti teks dalam fail, misalnya, menukar Dokumen.txt semua yang dikatakan "keluarga saya" untuk "kami." Untuk mencapai ini, kami boleh menggunakan editor teks pilihan kami (Kate, Gedit, SublimeText, dll) tetapi selalu baik untuk mengetahui varian, cara lain untuk mencapai hasil yang sama
Ia berlaku dengan ungkapan biasa anda boleh mencapainya, perintah sed hanya luar biasa, ia mempunyai varian dan pilihan yang tidak berkesudahan tetapi ... bagi mereka yang hanya ingin mengganti teks dari kaedah paling tidak mungkin, bagi mereka, saya membawa varian yang lebih mudah ini:
Berikutan contohnya, kami mempunyai fail Dokumen.txt terletak di $ RUMAH / Document.txt dengan teks berikut:
(...) keluarga saya Ia seperti semuanya, seperti milik anda atau jiran anda. Sebenarnya keluarga saya Kami berusaha menjadi orang yang bertanggungjawab dan di mata masyarakat, betul dari segi politik dan sosial. Namun, di rumah saya ada seekor domba hitam, dan itulah peranan saya LOL !. Saya selalu menjadi orang yang tidak takut untuk mengatakan apa yang dia fikirkan (walaupun itu nampaknya tidak betul di mata masyarakat), walaupun pada kenyataannya keluarga saya sudah muak dengan
kotoranmasyarakat hari ini.
Dengan arahan berikut, anda akan menukar «keluarga saya"oleh"kita":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Semudah itu 🙂
Jadi teksnya adalah:
(...) kita Ia seperti semuanya, seperti milik anda atau jiran anda. Sebenarnya kita Kami berusaha menjadi orang yang bertanggungjawab dan di mata masyarakat, betul dari segi politik dan sosial. Namun, di rumah saya ada seekor domba hitam, dan itulah peranan saya LOL !. Saya selalu menjadi orang yang tidak takut untuk mengatakan apa yang dia fikirkan (walaupun itu nampaknya tidak betul di mata masyarakat), walaupun pada kenyataannya keluarga saya sudah muak dengan
kotoranmasyarakat hari ini.
Sintaksnya adalah:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Perintahnya mungkin kelihatan agak rumit, mari kita susun sedikit dan jelaskan sedikit lebih mudah 😉
- perl : Apa yang akan kita gunakan, perl
- -pi : Pí, bagaimana π (nilai anggaran 3.14)
- -e : E membayangkannya untuk «e melaksanakan» ^ - ^
- Kemudian dalam petikan » kami buka dengan a s dan kita tutup dengan a g: "sg" ... Bayangkan S untuk Mula dan G untuk Game Over 😀
- Belok antara sg kita mesti meletakkan dua set kurung: [] y [], dengan cara itu: "S [] [] g"
- Di dalam tanda kurung pertama seperti yang saya katakan di atas, teks yang ingin kita alih keluar dan ganti dengan yang baru akan masuk, sementara pada kumpulan kurung kedua teks baru yang akan dimasukkan, akan mengikuti contoh: "S [keluarga saya] [kami] g"
Mudah bukan?
Penjelasannya sebenarnya jauh lebih luas daripada apa yang diperlukan untuk perintah itu, cukup mudah difahami 🙂
Perl adalah lebih daripada sekadar cara untuk mengganti teks, ini adalah keseluruhan bahasa 😉
Sekiranya anda ingin mengetahui lebih lanjut mengenainya, pasang pakejnya perl-doc dan lihatlah siapa yang membenarkannya, ini hanyalah alam semesta yang berbeza
By the way dan untuk menutup, dengan andaian anda ingin mencari semua fail .txt yang anda miliki di $ HOME / Documents / dan masing-masing menggantikan "keluarga saya" dengan "kami", anda boleh bergabung mencari + perl untuk mencapai ini:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Atau menggunakan kad liar:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Masalah dengan varian kedua ini adalah bahawa ia tidak akan menggantikan dalam fail yang ada di subfolder 🙂
Bagaimanapun, saya harap anda menganggapnya menarik. Bagi saya ia sangat berguna, saya sudah dapat mengganti teks terus dari terminal ... hebat! 😀
Saya rasa ramai di sini tahu arahan sed, yang mempunyai tujuan yang sama, menjadikannya lebih baik dan lebih mudah digunakan ...
Terima kasih atas komen anda,
Hanya dengan dua butiran, mengapa anda mengatakan bahawa sed menjadikannya lebih baik? Adakah lebih mudah digunakan dengan begitu banyak watak 'pelik'?
Salam untuk semua !!!. Saya telah menggunakan arahan sed, dan kaedah yang dijelaskan di sini dengan perl lebih mudah. Terima kasih KZKG ^ Gaara !!!.
Terima kasih atas komen 🙂
Saya rasa ini lebih sederhana daripada ungkapan biasa ... bahawa dengan begitu banyak watak 'pelik', sesuatu yang sangat rumit untuk difahami dan dipelajari dapat dilakukan kepada mereka yang tidak pandai.
Terdapat pepatah «lama» di luar sana: «Saya menghadapi masalah, saya memutuskan untuk menggunakan Ungkapan Biasa ... sekarang saya mempunyai DUA masalah» 😉
HAHAHAHAHAHAHA !!!
Ungkapan biasa dapat menyelamatkan nyawa kita pada titik tertentu ... ya, memerlukan waktu yang lama untuk belajar bagaimana menggunakannya dan tidak mati ketika mencuba.
Sekiranya saya mengetahui perintah ini bertahun-tahun yang lalu, ALLAH !! betapa mudahnya hidup saya 😀
Jelas! Dikendalikan dengan baik mereka sangat berkuasa 🙂 Tidak ada yang lebih baik untuk memanipulasi teks. Tetapi kadang-kadang, seperti yang anda katakan dalam kes ini dengan Perl, anda tidak perlu melangkah jauh jika penggantian sudah cukup.
Saya akan menggunakan Python pula :)
Tetapi dalam kehausan saya melihatnya lebih sederhana ... adakah saya melakukan sesuatu yang salah?
sed -i "yes / what-I-want-to-change / new-to-put /" file-in-which-to-diganti
heh heh ... dan jika saya mahu ganti "http://my.blog.com/content/" dengan "http://my.blog.com/uploads/files/" 😀 ... sudah ada anda sudah untuk meletakkan \ dengan ruang dan lain-lain, dan menjadi kompleks atau tidak?
Tidak wajib menggunakan / sebagai pemisah. Lihat dengan +
fail -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» fail
O_O ... WTF!
Anda telah membuka banyak pilihan untuk saya sekarang .. O_O
Saya suka catatan ini di mana kita semua belajar sesuatu 🙂
Saya juga tidak tahu.
Saya lebih suka menggunakan secara langsung vi ..
Semudah:
:% s / kami / keluarga saya / g
% -> keseluruhan dokumen
s -> cari
g -> semua kejadian
Salam ..
Terima kasih!
Saya tidak tahu bagaimana melakukannya dengan vi
Ditambah ke kegemaran!
Terima kasih!
Lihatlah jika anda mempunyai sedikit arahan rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Kemasukan hebat! Sekiranya ada yang berminat, sama dengan arahan Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
Dan apa yang berlaku jika dalam fail apa yang ingin saya ganti mempunyai tanda kutip?
Contoh ganti teks yang disebut: »1 ″ dengan teks:» 2 ″
bagaimana perintahnya?
Hello
Saya mahu mengganti rentetan yang mempunyai @ di tengah dan hanya menukar teks ke sebelum di.
teks untuk diubah: Peru hidup lama
teks baru: Viva mi patria @percysalgado
Ditunjukkan: Hidup lama tanah air saya
Terima kasih atas bantuan anda
"\" Anda mesti menggunakan garis miring sebelum watak dengan penggunaan ganda @, #, sehingga mereka ditafsirkan sebagai teks.
Dan bagaimana saya melakukannya di tingkap ????