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

Justin
sumber

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
Volker Siegel
sumber
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
Cyrus
sumber
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