Удалить N строк и добавить M строк в каждом файле, соответствующих шаблону, рекурсивно - PullRequest
0 голосов
/ 24 января 2019

Я прошу помощи в оптимизации следующей команды, но также пишу ее здесь для справки, если она может кому-нибудь помочь в будущем.

Я хотел просмотреть все .swift файлы в текущей папке и продолжить рекурсивно с файлами во всех подпапках, а затем выполнить:

  1. Удалить первые строки N (ниже 7) в каждом файле
  2. Prepend , без добавления, несколько строк, содержащих символы, которые в противном случае могли бы потребоваться экранировать (например, //)

1 Ответ

0 голосов
/ 24 января 2019

Решение, которое я придумал, основано на этом ответе и было одобрено благодаря @EdMorton ?, но при чтении многострочного текста для добавления из файла вместо echo в строке.

Это может работать, только если у вас нет пробелов в ваших путях.

Решение

Вы можете скопировать, вставить это в терминал, заменить 8 сколько строк вы хотите удалить, а также заменить ~/Desktop/TextToPrepend.txt на путь к вашему файлу с содержимым, которое вы хотите добавить.

find . -name '*.swift' | while IFS= read -r f; do
    cp ~/Desktop/TextToPrepend.txt tmpfile &&
    tail -n +8 "$f" >> tmpfile && 
    mv tmpfile "$f"
done

Улучшения?

Было бы еще приятнее предусмотреть пространство n путей и не использовать файл, а вместо этого использовать многострочное решение на месте, но я столкнулся с проблемами с переводом строки и экранированием //.

Использованиеcase

Я только что использовал это для замены заголовка файла для ВСЕХ файлов Swift в кошельке iOS Zilliqa с открытым исходным кодом под названием "Zhip" .

Стандарт для заголовков файлов вXcode должен начинать каждую строку с комментария //.

Pro-tip

Начните свой проект, добавив файл IDETemplateMacros.plist как , предложенный этим руководством .

...