
Necesito insertar 'nombre del paquete de importación' en la línea después de las importaciones. En archivos que contienen la palabra específica. Lo que intento:
find iOS/Chat \
-type f \
-name "*.swift" \
-exec gsed -e "/Behavior/ " -e "20a import RxSwift" -i {} +;
También lo intenté: -exec gsed -e "/Behavior/20a import RxSwift" -i {} +;
Parece que esta construcción no funciona.
gsed - gnused, no encontré cómo hacer que funcione con bsd sed. Mac OS.
UPD: Resultado cercano
find iOS/Chat -type f -name "*.swift*" -exec grep -iHn "Behavior" {} \; | cut -d: -f-1 | xargs gsed -i '/import Foundation/a import RxSwift'
Contras:
- si está configurado
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'` no funciona para mí...
Sigo investigando....
Respuesta1
Ok, encontré la solución.
brew install gsed
- necesario
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}'
Cómo sed
primera ocurrencia:https://stackoverflow.com/a/9970915/887325
find
- encontrar todos los archivos que contienenReachability
texto;cut
- único caminoxargs
- archivos de ruta como argumento paragsed
gsed
- buscar la primeraimport
línea contiene {i\ - insertar una nueva línea:import RxReachability
Espero que esta respuesta me sea útil a los 90 años.