Sed untuk menghapus spasi kosong


28

Adakah yang tahu cara menggunakan Sed untuk menghapus semua spasi kosong di file teks? Saya belum pernah mencoba menggunakan perintah hapus "d" untuk melakukannya, tetapi sepertinya tidak bisa mengetahuinya

Jawaban:


35

"Ruang" seperti apa?

Untuk "menghapus semua ruang kosong" dapat berarti salah satu dari hal yang berbeda:

  1. hapus semua kemunculan karakter spasi, kode 0x20.
  2. hapus semua ruang horisontal, termasuk karakter tab horizontal, " \t"
  3. hapus semua spasi putih, termasuk baris baru, " \n" dan lainnya

Alat yang tepat untuk pekerjaan itu

Jika sedbukan keharusan karena alasan tersembunyi, lebih baik gunakan alat yang tepat untuk pekerjaan itu.

Perintah trmemiliki kegunaan utama dalam menerjemahkan (karena itu nama "tr") daftar karakter ke daftar karakter lain. Sebagai kasing, dapat diterjemahkan ke daftar karakter kosong; Opsi -d( --delete) akan menghapus karakter yang muncul dalam daftar.

Daftar karakter dapat menggunakan kelas karakter dalam [:...:]sintaksis.

  1. tr -d ' ' < input.txt > no-spaces.txt
  2. tr -d '[:blank:]' < input.txt > no-spaces.txt
  3. tr -d '[:space:]' < input.txt > no-spaces.txt

Saat bersikeras sed

Dengan sed, [:...:]sintaks untuk kelas karakter perlu digabungkan dengan sintaks untuk set karakter di regexps [...], sehingga menghasilkan yang agak membingungkan [[:...:]]:

  1. sed 's/ //g' input.txt > no-spaces.txt
  2. sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
  3. sed 's/[[:space:]]//g' input.txt > no-spaces.txt

1
+1, notasi POSIX untuk ruang kosong adalah cara yang tepat untuk digunakan.
Avinash Raj

1
Petunjuk bagus untuk menggunakan tr untuk tugas ini, sangat bagus. Satu-satunya hal yang harus saya sesuaikan adalah bahwa tr membaca input dari stdin, jadi yang berhasil bagi saya adalah tr -d ' ' < input.txt > no-spaces.txt.
Langit

Komentar @ Sky bekerja di macOS saya (tidak diuji di Linux). Mungkin jawabannya harus diperbarui?
iplus26

Terima kasih banyak @Sky, itu memang kesalahan yang buruk. Saya akan memperbaiki tiga baris dengan trsekarang. (Apakah Anda melihatnya di tempat lain?)
Volker Siegel

7

Anda dapat menggunakan ini untuk menghapus semua spasi putih di file:

 sed -i "s/ //g" file

2
Tidak ada dadu. Saya sudah mencoba pendekatan serupa juga. Tidak berfungsi
Justin

Apakah Anda ingin menghapus spasi atau tab putih?
Cyrus

1
hapus spasi putih
Justin

2
Tes sederhana:man sed | sed "s/ //g"
Cyrus

1
@starscream_disco_party: sama saja. Anda dapat mengganti ketiganya /dengan karakter yang berbeda, misalnya:sed "ss ssg"
Cyrus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.