Bagaimana menghapus spasi spasi di akhir baris dalam file yang diberikan (lebih dari satu)?

9

Saya sooo muak dengan ruang yang tidak berguna di file sumber yang saya bahkan mengkonfigurasi vim untuk menunjukkannya.

Masalahnya adalah bahwa saya sangat sering (jika tidak selalu) harus berurusan dengan ruang yang tidak berguna dengan pasangan saya.

Saya hanya ingin memindai file sumber (diberi ekspresi reguler) dan menghapus spasi putih dari semua file yang diberikan.

Saya sudah mencari di web ("bash remove whitespace" dll.) Tetapi tidak menemukan sesuatu yang bermanfaat.

Olivier Pons
sumber
2
Hapus spasi apa? Tanpa contoh apa yang ingin Anda hapus, saya tidak melihat bagaimana orang bisa membantu Anda. (Saya kira tr -d ' ' < file.footidak persis apa yang Anda cari.)
Mat
Bagaimana Anda bisa secara programatik membedakan antara ruang kosong yang tidak berguna dan ruang kosong yang berguna? BTW: Anda bisa menggunakan for for loop dan mv dan sed dan collapse whitespace;
bsd
Anda juga dapat menghapus trailing spasi ketika Anda menyimpan file Anda di vim (menyelamatkan Anda dari kesulitan untuk menjalankan kembali perintah ini setelah Anda mengedit sesuatu): unix.stackexchange.com/questions/75430/…
Lucas

Jawaban:

8

Jika menurut whitespace yang tidak berguna maksud Anda trailing whitespace di akhir baris, ini akan bekerja pada sistem GNU:

find -name '*.c' -print0 | xargs -r0 sed -e 's/[[:blank:]]\+$//' -i

(ganti *.cdengan apa pun yang cocok dengan file sumber Anda)

Dennis Kaarsemaker
sumber
Saya telah mengubah judulnya, terima kasih banyak atas jawaban Anda. Seseorang telah menolak karena, mungkin dia pikir itu sangat sederhana, sehingga tidak ada yang harus mengajukan pertanyaan seperti itu ;^). Terima kasih lagi.
Olivier Pons
1

Ini adalah masalah berulang!

perl -i -pe 's/\s+\n/\n/'  ./*.c

(ini juga menghapus ' \r\n')

Saya biasanya menggunakan versi "nrs" yang sedikit lebih rumit (tidak ada spasi yang berlebihan):

#!/usr/bin/perl -pi
s/\h*(\r\n|\n|\r)/\n/g;                 ## normalize \n (DOS, MAC)
s/^(\xFF\xFE|\xFE\xFF|\xEF\xBB\xBF)//;  ## remove BOM !

pasang: chmod 755 nrs; cp nrs ~/bin; (atau serupa)

dan gunakan: nrs ./*.c

Jangan menggunakannya dalam file biner!

Joao
sumber
0

Untuk menghindari menyentuh file yang sudah OK, dengan alat GNU:

grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
  xargs -r0 sed -i 's/\s+$//'
Stéphane Chazelas
sumber