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

Всегда имейте живой USB/оптический диск своей любимой удобной ОС, так, чтобы при случайной встрече с некоторым ноутбуком можно было загрузиться от него и видеть, как он тарифицирует. Удостоверьтесь, чтобы Вы протестировали проблематичный материал как WiFi, 3G и GPU (и возможно Bluetooth).

10
14.10.2011, 18:58
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' {} +

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

Править: Это было бы find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} +

9
27.01.2020, 20:00
  • 1
    Первый вариант работает как ожидалось. Второе (жемчуг) вариант заменяет вкладку только одним пространством вместо два. –  Ivan 25.10.2011, 03:36
  • 2
    Да, извините: это было ошибкой форматирования. Исходный код говорит, что два пробелов, но представленный HTML только показывает тот. –  janmoesen 25.10.2011, 09:26

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

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

Примечание: это не тестируется.

10
27.01.2020, 20:00
  • 1
    Это еще не рекурсивно. Можно использовать find или оболочка, которая поддерживает **/*.scala для рекурсии. –  janmoesen 14.10.2011, 16:16
  • 2
    Отредактированный для добавления рекурсивного поведения... –  Sardathrion - Reinstate Monica 14.10.2011, 16:23
  • 3
    Не продвигайте find | xargs. Использовать find -exec вместо этого, как я упомянул в своем ответе. Легче и более безопасный. –  janmoesen 14.10.2011, 19:44
  • 4
    Попробованный это, никакой результат. Команда сразу возвращается, и ничто не изменяется в файлах. –  Ivan 25.10.2011, 03:30
  • 5
    это не тестируется, но суть его, будет работать. –  Sardathrion - Reinstate Monica 25.10.2011, 10:23

Теги

Похожие вопросы