Как заменить все вкладки в каждом файле в ветке файловой системы на 2 пробела?

Я кодирую Scala, и это соглашение – использовать двойные пробелы на уровень для идентификации. Но использование разных редакторов делает мои источники заполнены сочетанием пробелов и вкладок.

Я бы хотел реорганизовать все файлы (* .scala-файлы, на самом деле, но указать это необязательно) (в данном каталоге и всей базовой ветви FS (рекурсивно)) автоматически, заменив все вкладки на два пробела. Я считаю, что есть простой и красивый способ сделать это с помощью классических инструментов Unix / GNU, но мне не хватает опыта в этой области. Не могли бы вы помочь мне?

  • Шаблоны значений для сценария bash для файлов apache conf
  • Как удалить текстовые блоки в файле журнала?
  • Как сравнить строки в двух файлах
  • Извлечь строку, если первое поле содержит точку
  • Повторить слова, разбитые символами дефиса и двойной символа новой строки
  • Печать уникальных строк
  • Количество вхождений в текстовом файле, где первый символ после 12-го канала равен 1?
  • Unix - поиск имен с egrep
  • 2 Solutions collect form web for “Как заменить все вкладки в каждом файле в ветке файловой системы на 2 пробела?”

    Рекурсивно, используя expand (которое было сделано для этой цели): find . -type f -name '*.scala' -exec bash -c 'for x in "$@"; do mv "$x"{,.bak} && expand -t 2 "$x.bak" > "$x" && rm "$x.bak"; done' {} + find . -type f -name '*.scala' -exec bash -c 'for x in "$@"; do mv "$x"{,.bak} && expand -t 2 "$x.bak" > "$x" && rm "$x.bak"; done' {} +

    Я бы сделал это с помощью sed или perl (см. Ответ Sardathrion), потому что они поддерживают встроенное редактирование, но я хотел бы упомянуть о том, что все равно expand .

    EDIT: Это будет find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} + find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} +

    Это должно сделать это:

     find . -type f -name '*.scala$' -exec sed -i 's/\t/ /g' {} + 

    Примечание: это не проверено.

    Linux и Unix - лучшая ОС в мире.