Як видалити пробіли пробілів в кінці рядка в заданих файлах (більше одного)?


9

Мені настільки набридли непотрібні пробіли у вихідних файлах, що я навіть сконфігурував vim для їх показу.

Проблема полягає в тому, що мені дуже часто (якщо не завжди) доводиться стикатися з марними просторами зі своїми товаришами-розробниками.

Я просто хотів би сканувати вихідні файли (з урахуванням регулярного виразу) та видалити пробіли з усіх заданих файлів.

Я шукав в Інтернеті ("bash remove white space" тощо), але не знайшов чогось корисного.


2
Видалити пробіл? Без прикладу того, що ви хочете видалити, я не бачу, як хтось міг вам допомогти. (Я здогадуюсь, tr -d ' ' < file.fooце не саме те, що ви шукаєте.)
Мат

Як ви можете програмно визначити різницю між марними пробілами та корисними пробілами? BTW: Ви можете використовувати цикл і mv, sed та згортати пробіли;
bsd

Ви також можете видалити пробіли пробілів, коли ви зберігаєте свої файли у vim (заощаджуючи проблеми, щоб повторно виконати цю команду після того, як щось відредагувати): unix.stackexchange.com/questions/75430/…
Лукас

Відповіді:


8

Якщо під марним пробілом ви маєте на увазі пробіли пробілів в кінці рядка, це буде працювати в системах GNU:

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

(замінити *.cтим, що відповідають вихідним файлам)


Я змінив назву, дуже дякую за вашу відповідь. Хтось проголосував, тому що, можливо, він вважав, що це дуже просто, що ніхто не повинен задавати таке питання ;^). Ще раз дякую вам.
Олів'є Понс

1

Це повторювана проблема!

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

(це також видаляє ' \r\n')

Я зазвичай використовую трохи складнішу версію "nrs" (без зайвих пробілів):

#!/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 !

встановіть його: chmod 755 nrs; cp nrs ~/bin; (або подібне)

і використовувати: nrs ./*.c

Не використовуйте його у двійкових файлах!


0

Спробуйте Ex-way:

ex +'bufdo!%s/\s\+$//e' -scxa *.*

щоб видалити пробіли білого кольору з усіх файлів у поточній папці. Для рекурсії (bash4 / zsh) ви можете використовувати новий варіант глобалізації ( **/*.*).

Примітка. :bufdoКоманда не є POSIX .



0

Щоб не торкатися файлів, які вже добре, за допомогою інструментів GNU:

grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
  xargs -r0 sed -i 's/\s+$//'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.