- Untuk memformat semula kod sumber
- Untuk membersihkan data
- Untuk mempermudah output baris perintah
Sekiranya kita bercakap mengenai ruang kosong yang terkemuka, mereka mudah dilihat kerana mereka berada di awal teks. Walau bagaimanapun, tidak mudah untuk melihat tempat kosong di belakang. Perkara yang sama berlaku dengan ruang berganda yang kadang kala sukar dilihat. Semuanya menjadi lebih mencabar apabila anda perlu mengeluarkan semua ruang kosong yang terdahulu dan yang tertinggal dari dokumen yang mengandungi ribuan baris.
Untuk membuang ruang kosong dari dokumen anda, anda boleh menggunakan pelbagai alat seperti awk, sed, cut, dan tr. Dalam beberapa artikel lain, kami telah membincangkan penggunaan awk dalam menghilangkan ruang kosong. Dalam artikel ini, kita akan membincangkan penggunaan sed untuk menghapus ruang kosong dari data.
Anda akan belajar menggunakan sed untuk:
- Keluarkan semua ruang putih
- Keluarkan ruang putih terkemuka
- Alih keluar ruang kosong
- Keluarkan kedua-dua ruang putih utama dan belakang
- Gantikan pelbagai ruang dengan satu ruang
Kami akan menjalankan perintah di Ubuntu 20.04 Fossa Fokus. Anda juga boleh menjalankan perintah yang sama pada distribusi Linux yang lain. Kami akan menggunakan aplikasi Terminal Ubuntu lalai untuk menjalankan perintah. Untuk membuka Terminal, gunakan pintasan papan kekunci Ctrl + Alt + T.
Apa itu Sed
Sed (singkatan dari editor aliran) adalah utiliti yang sangat kuat dan berguna di Linux yang membolehkan kita melakukan manipulasi teks asas pada aliran input. Ia bukan penyunting teks, tetapi membantu memanipulasi dan menyaring teks. Ia menerima aliran input dan mengeditnya mengikut arahan pengguna dan kemudian mencetak teks yang diubah ke layar.
Dengan sed, anda boleh:
- Pilih teks
- Cari teks
- Masukkan teks
- Ganti teks
- Padamkan teks
Menggunakan Sed untuk Mengeluarkan Ruang Kosong
Kami akan menggunakan sintaks berikut untuk membuang ruang kosong dari teks:
s / REGEXP / penggantian / benderaDi mana
- s /: adalah ungkapan penggantian
- REGEXP: adalah ungkapan biasa untuk dipadankan
- penggantian: ialah tali gantian
- bendera: Kami hanya akan menggunakan bendera "g" untuk membolehkan penggantian secara global di setiap baris
Ungkapan biasa
Beberapa ungkapan biasa yang akan kami gunakan di sini adalah:
- ^ perlawanan bermula dari garisan
- $ pertandingan hujung talian
- + sepadan dengan satu atau lebih kejadian watak sebelumnya
- * sepadan dengan sifar atau lebih banyak kejadian watak sebelumnya.
Untuk tujuan demonstrasi, kami akan menggunakan contoh fail berikut bernama "testfile".
Lihat Semua Ruang Putih dalam Fail
Untuk mencari semua ruang kosong dalam fail anda, masukkan output perintah cat ke perintah tr seperti ini:
$ cat testfile | tr "" "*" | tr "\ t" "&"Perintah ini menggantikan semua ruang kosong dalam fail anda dengan simbol (*), yang menjadikannya lebih mudah untuk melihat semua ruang kosong sama ada ruang kosong tunggal, berganda, utama, atau belakang.
Pada tangkapan skrin berikut, anda dapat melihat ruang putih digantikan dengan simbol *.
Buang Semua Ruang Putih (Termasuk Ruang dan Tab)
Dalam beberapa kes, anda perlu membuang semua ruang kosong dari data, i.e. memimpin, mengekori, dan ruang kosong antara teks. Perintah berikut akan membuang semua ruang kosong dari "testfile".
$ cat testfile | sed -r / s + // g 'Nota: Sed tidak mengubah fail anda melainkan anda menyimpan output ke fail.
Pengeluaran:
Setelah menjalankan perintah di atas, output berikut muncul, yang menunjukkan bahawa semua ruang kosong telah dikeluarkan dari teks.
Anda juga boleh menggunakan perintah berikut untuk mengesahkan bahawa semua ruang putih telah dikeluarkan.
$ cat testfile | sed -r 's / \ s + // g' | tr "" "*" | tr "\ t" "&"Dari output, anda dapat melihat bahawa tidak ada simbol (*) yang bermaksud semua ruang putih telah dikeluarkan.
Untuk membuang semua ruang kosong tetapi hanya dari baris tertentu (katakan nombor baris 2), anda boleh menggunakan arahan berikut:
$ cat testfile | sed -r '2s / \ s + // g'Buang Semua Ruang Putih Terpopuler (Termasuk Ruang dan Tab)
Untuk membuang semua ruang kosong dari awal setiap baris (ruang kosong terkemuka), gunakan arahan berikut:
$ cat testfile | sed 's / ^ [\ t] * //'Pengeluaran:
Output berikut muncul setelah menjalankan perintah di atas, yang menunjukkan semua ruang kosong terkemuka telah dikeluarkan dari teks.
Anda juga boleh menggunakan perintah berikut untuk mengesahkan bahawa semua ruang kosong terkemuka telah dikeluarkan:
$ cat testfile | sed 's / ^ [\ t] * //' | tr "" "*" | tr "\ t" "&"Dari keluaran, anda dapat melihat tidak ada simbol (*) di awal garis yang mengesahkan bahawa semua ruang putih utama dikeluarkan.
Untuk membuang ruang kosong utama hanya dari baris tertentu (katakan nombor baris 2), anda boleh menggunakan arahan berikut:
$ cat testfile | sed '2s / ^ [\ t] * //'Alih Keluar Semua Ruang Kosong (Termasuk Ruang dan Tab)
Untuk membuang semua ruang kosong dari hujung setiap baris (mengejar ruang kosong), gunakan arahan berikut:
$ cat testfile | sed 's / [\ t] * $ //'Pengeluaran:
Output berikut muncul setelah menjalankan perintah di atas, yang menunjukkan semua ruang kosong yang tertinggal telah dikeluarkan dari teks.
Anda juga boleh menggunakan perintah berikut untuk mengesahkan bahawa semua ruang kosong yang tertinggal telah dikeluarkan.
$ cat testfile | sed 's / [\ t] * $ //' | tr "" "*" | tr "\ t" "&"Dari keluaran, anda dapat melihat tidak ada simbol (*) di hujung garisan yang mengesahkan bahawa semua ruang kosong yang tertinggal dikeluarkan.
Untuk membuang ruang kosong yang tertinggal hanya dari baris tertentu (katakan baris nombor 2), anda boleh menggunakan arahan berikut:
$ cat testfile | sed '2s / [\ t] * $ //'Keluarkan kedua-dua Ruang Putih yang Terkemuka dan Mengikuti
Untuk membuang semua ruang kosong dari awal dan akhir setiap baris (i.e. kedua-dua ruang kosong utama dan belakang), gunakan arahan berikut:
$ cat testfile | sed 's / ^ [\ t] * //; s / [\ t] * $ //'Pengeluaran:
Output berikut muncul setelah menjalankan perintah di atas, yang menunjukkan bahawa kedua-dua ruang kosong yang terdahulu dan yang tertinggal telah dikeluarkan dari teks.
Anda juga boleh menggunakan perintah berikut untuk mengesahkan bahawa kedua-dua ruang putih yang terdahulu dan yang tertinggal telah dikeluarkan.
$ cat testfile | sed 's / ^ [\ t] * //; s / [\ t] * $ //' | tr "" "*" | tr "\ t" "&"Dari keluaran, anda dapat melihat tidak ada simbol (*) di awal atau akhir garis yang mengesahkan bahawa semua ruang kosong di depan dan di belakang dihapus.
Untuk membuang kedua-dua ruang kosong utama dan belakang dari hanya garis tertentu (katakan baris nombor 2), anda boleh menggunakan arahan berikut:
$ cat testfile | sed '2s / ^ [\ t] * //; 2s / [\ t] * $ //'Gantikan Pelbagai Ruang Putih dengan Ruang Putih Tunggal
Dalam beberapa kes, terdapat beberapa ruang kosong di tempat yang sama dalam fail, tetapi anda hanya memerlukan ruang kosong tunggal. Anda boleh melakukannya dengan menggantikan beberapa ruang tersebut dengan satu ruang menggunakan sed.
Perintah berikut akan menggantikan semua ruang kosong dengan ruang kosong tunggal dari setiap baris dalam "testfile".
$ cat testfile | sed 's / [] \ + / / g'Pengeluaran:
Output berikut muncul setelah menjalankan perintah di atas, yang menunjukkan beberapa ruang kosong telah diganti dengan ruang kosong tunggal.
Anda juga boleh menggunakan perintah berikut untuk mengesahkan sama ada banyak ruang putih diganti dengan ruang kosong tunggal:
$ cat testfile | sed 's / [] \ + / / g' | tr "" "*" | tr "\ t" "&"Dari output, anda dapat melihat simbol tunggal (*) di setiap tempat yang mengesahkan bahawa semua kejadian beberapa ruang putih diganti dengan satu ruang kosong.
Jadi, ini adalah mengenai membuang ruang kosong dari data anda menggunakan sed. Dalam artikel ini, anda telah belajar bagaimana menggunakan sed untuk menghapus semua ruang kosong dari data anda, membuang hanya ruang kosong utama, atau belakang, dan menghapus ruang kosong utama dan belakang. Anda juga telah belajar cara mengganti pelbagai ruang dengan satu ruang. Sekarang anda akan mudah membuang ruang kosong dari fail yang mengandungi beratus-ratus atau ribuan baris.