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

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

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

  • Печать уникальных строк
  • Каким образом можно извлечь сегмент из текстового файла?
  • Извлечь строку, если первое поле содержит точку
  • Поиск текстового файла с помощью одной строки с использованием регулярных выражений
  • Как сравнить строки в двух файлах
  • Как удалить повторяющиеся символы?
  • sed удалять пространство
  • Объединение строк текста с повторным началом
  • 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 - лучшая ОС в мире.