Задача из области написания кода. Часто случается так, что в конце строки образуются лишние пробелы. Как их быстрее всего увидеть и удалить? Приходит на помощь sed.
На первый взгляд, задача тривиальна:
sed -ri 's/\s+$//g' foobar
Но есть в ней одна засада. Если исходный файл foobar имеет переводы строк системы DOS/Windows (т.е. два символа CR-LF), то символ \r в unix системах будет трактован тоже как пробел и соответственно удален. В итоге вместе с пробелами поменяются и переводы строк. Что может быть нежалательно.
Правильнее будет сделать так:
sed -ri 's/ +(\r)?$/\1/g' foobar
В данном случае мы запоминаем, был ли в конце строки символ \r и заменяем последовательность пробелов (именно пробелов, а не вообще пробельных символов) на этот символ (или его отсутствие, если исходный файл с переводами *nix).
Ну и еще пара моментов. Флаг
-r
, расширенные регулярные выражения, просто чтобы не писать лишние бэкслеши. Флаг -i
замена файла in-place, т.е. и поток будет прочитан из файла и записан в него же.Ну и наконец команда, чтобы выполнить данную операцию для всех файлов директории.
find . -name '*.java' -exec sed -ri 's/ +(\r)?$/\1/g' \{\} \;
Комментариев нет:
Отправить комментарий