Pada masa-masa tertentu, kita perlu menghapus baris tertentu dari satu fail atau beberapa fail, misalnya, telah terjadi pada saya bahawa saya mempunyai senarai keseluruhan fail dan saya perlu menghapus baris # 27 dari semua ini (baris # 27 adalah dari ACL , norma, peraturan, konfigurasi), saya boleh mengedit fail mengikut fail atau saya dapat mencapai apa yang saya perlukan menggunakan perintah sed dan skrip bash (pilihan).
Tetapi, mari kita cuba satu fail yang agak mudah.
Kami mempunyai fail distros-deb.txt yang mengandungi ini:
Debian
kubuntu
archlinux
solus
pudina
Dengan kata lain, fail tersebut distros-deb.txt adalah di mana kita akan meletakkan distro berdasarkan Debian, tetapi di sana kita melihat bahawa di baris # 3 ada "archlinux", distro yang jelas tidak ada kaitan dengan Debian, jadi kita mesti menghilangkan garis itu. Untuk menghilangkan baris # 3 fail itu, kami akan meletakkan perkara berikut:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Menjelaskan garis ini agak mudah, dengan dahaga "3d" kami menunjukkan bahawa kami akan menghapus baris # 3, dengan distros-deb.txt Kami menunjukkan fail apa yang harus dikerjakan, iaitu, hapus baris # 3 fail ini, sampai di sini jika kita tekan Enter, itu akan menunjukkan kepada kita apa yang kita mahukan tetapi di terminal, jadi dengan > distros-deb-ok.txt kami menunjukkan bahawa bukannya menunjukkan hasilnya di terminal, tetapi meletakkannya dalam fail dengan nama ini.
Apa yang mudah?
Kita juga boleh mengelakkan penggunaan > distros-deb-ok.txt menggunakan parameter tepat dari sed, parameter -i
Maksudnya, sekiranya kita ingin menghapus baris dari fail dan menyimpannya dengan nama yang sama (dan bukan dalam fail lain), cukup tambahkan parameter -i :
sed -i "3d" distros-deb.txt
Ini akan mengeluarkan baris # 3 dari distros-deb.txt dan menyimpannya.
Bagaimana jika saya mahukan pelbagai baris, iaitu untuk membuang baris # 3 tetapi juga # 4 dan # 5? Untuk mencapai ini, kami meletakkan jarak antara 3 hingga 5, iaitu:
sed -i "3,5d" distros-deb.txt
Dan ia akan menunjukkan kepada saya hanya debian dan kubuntu 😀
Jadi bagaimana jika saya ingin memadam dari baris 2 hingga baris terakhir, apabila saya tidak mengetahui jumlah barisnya?
Cukup gunakan simbol dolar - »$
sed -i "2,$d" distros-deb.txt
Sekiranya anda ingin menghilangkan dari baris pertama hingga # 4 maka kami hanya meletakkan nilai 1 pada awal:
sed -i "1,4d" distros-deb.txt
Ini adalah segalanya, tip yang sangat berguna ketika anda ingin membuat skrip bash untuk mengotomatisasi tugas dan anda perlu mengubah dan menghilangkan baris fail konfigurasi, untuk mengubahsuai yang dapat kita gunakan sed o perl, serta untuk menghilangkan kita sudah tahu bagaimana melakukannya dengan sed 😉
salam
16 komen, tinggalkan komen anda
Sumbangan yang sangat baik 😉
Terima kasih
By the way, kami telah menerima e-mel anda sekarang saya akan menjawab anda 😀
salam
Sebagai imam utama terminal, pelayan dan sambungan ssh saya datang kepada anda, oh KZKG ^ Gaara yang hebat, dan saya bertanya kepada anda: di mana saya boleh mendapatkan tutorial pada tahap ketidaktahuan saya yang membolehkan saya menggunakan sambungan ssh antara dua mesin jauh di rangkaian yang berbeza untuk dikongsi fail teks, pdf, gambar dan suara (mp3)….
(I.e.
Serius, bolehkah anda membimbing saya dalam hal ini, saya mempunyai dua mesin, satu di tempat kerja dan satu di rumah dan saya memerlukan sambungan ssh di antara mereka (kerana seperti yang saya faham, ssh membenarkan kandungan untuk dikongsi antara mesin, adakah saya betul?)
Dan jika saya salah, aplikasi apa yang anda cadangkan?
Dan di mana saya dapati tutorial asas dalam hal ini?
scp
pengguna scp @ machine_address: user path @ machine_address: path.
Sintaks yang sama dengan cp, sumber -> destinasi.
Anda muncul lelaki, anda tersesat.
Petua Baik!
Petua menarik… xD
Adakah anda tahu yang membuat teks tebal menonjol?
Maksud saya, saya mempunyai fail txt yang merupakan kamus, ia mempunyai lebih daripada 10000 baris dan saya mahu ia menonjolkan teks tertentu sebelum titik penggantungan ":" dan melakukannya satu demi satu terlalu banyak.
Hello,
Fail txt adalah teks biasa, seperti namanya ... polos, tanpa format atau yang serupa, saya minta maaf tetapi saya rasa apa yang anda minta tidak dapat dilakukan, boleh? 🙁
salam
sebenarnya boleh, tetapi anda harus mengetahui format destinasi.
cth:
echo $ (echo "Robert: Hello. Tukar di sini" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
ia adalah masalah untuk mengatasi.
cara lain untuk menghapuskan yang boleh digunakan adalah sed '/' $ 1 '/ d' tetapi anda harus yakin dengan semula.
kemudian selesai menyimpannya di * .odt
Tidak ada cara yang lebih mudah untuk melakukannya dengan LibreOffice?
Bolehkah anda menghapus sebahagian daripada baris dan meninggalkan yang lain?
Katakan saya mahu memadamkan semua yang ada di hadapan perkataan dalam baris tertentu.
Atau padamkan semua yang mengikuti perkataan itu.
Ya, ini adalah masalah menarik regex (jika perlu lelaki sed -r, –regexp-diperpanjang)
Bermula dari apa yang saya dapati
gema «Robert: Helo. Tukar di sini »| sed / Perubahan // '
dengan corak yang jelas dan dengan. (satu watak) dan * (lebih daripada satu)
Selepas:
gema «Robert: Helo. Tukar di sini »| sed / Perubahan. * // '
Sebelum:
gema «Robert: Helo. Tukar di sini »| sed /. * Tukar // '
Sekiranya penting, perkataan itu muncul
gema «Robert: Helo. Tukar di sini »| sed / Perubahan. * / Tukar / '
atau lebih terperinci
dalam baris yang mengandungi Robert apa yang berlaku selepas Perubahan
echo -e «Fritz: Helo. Tukar di sini \ nRobert: Helo. Tukar di sini »| sed '/Robert/s/Cambio.*//'
atau seperti pada permulaan mengeluarkan baris kedua dan memproses selebihnya
echo -e «Fritz: Helo. Tukar di sini \ nRobert: Helo. Tukar di sini \ nLainnya »| sed -e 2d -e / Perubahan. * // '
echo -e «Fritz: Helo. Tukar di sini \ nRobert: Helo. Tukar di sini \ nLainnya »| sed '2d; s / Tukar. * //'
Terima kasih, ia sangat berguna untuk saya.
Artikel yang bagus, yang saya suka, betapa hebatnya SysAdmin!
Bagaimana kehidupan kita tanpa sed, awek, perl, grep, tail, head, "Emacs" dan banyak lagi alat penting lain !?
Terima kasih, ia sangat membantu.
Halo, dan bagaimana anda boleh menghapus baris 1,4 dan 10 dari fail dalam arahan yang sama?