Мне нужно вставить 'import packagename' в строку после imports. В файлах, которые содержат определенное слово. Что я пробую:
find iOS/Chat \
-type f \
-name "*.swift" \
-exec gsed -e "/Behavior/ " -e "20a import RxSwift" -i {} +;
Также пробовал: -exec gsed -e "/Behavior/20a import RxSwift" -i {} +;
Похоже, эта конструкция не работает.
gsed - gnused, я не нашел как make работать с bsd sed. mac os.
UPD: Близкий результат
find iOS/Chat -type f -name "*.swift*" -exec grep -iHn "Behavior" {} \; | cut -d: -f-1 | xargs gsed -i '/import Foundation/a import RxSwift'
Минусы:
- если установить
gsed -i '/import/a import RxSwift' its called for each import enter line. I want only first. Something like:
gsed -i '0,/import/a import RxSwit'` у меня не работает...
Продолжаем расследование...
решение1
Хорошо, я нашел решение.
brew install gsed
- нужный
find ./ \
-type f \
-name "*.swift*" \
-exec grep -lHn "Reachability" {} \; | cut -d: -f-1 | xargs gsed -i -e '/import/{i\import RxReachability' -e ':a;n;ba}'
Как sed
первое появление:https://stackoverflow.com/a/9970915/887325
find
- найти все файлы, содержащиеReachability
текст;cut
- единственный путьxargs
- пути к файлам как аргумент дляgsed
gsed
- найти первуюimport
строку, содержащую {i\ - вставить новую строку:import RxReachability
Надеюсь, этот ответ будет мне полезен в 90 лет.