Ich muss „import packagename“ in die Zeile nach „imports“ einfügen. In Dateien, die das spezifische Wort enthalten. Was ich versuche:
find iOS/Chat \
-type f \
-name "*.swift" \
-exec gsed -e "/Behavior/ " -e "20a import RxSwift" -i {} +;
Auch probiert: -exec gsed -e "/Behavior/20a import RxSwift" -i {} +;
Scheint als ob diese Konstruktion nicht funktioniert.
gsed – gnused, ich habe nicht herausgefunden, wie es mit bsd sed. mac os funktioniert.
UPD: Knappes Ergebnis
find iOS/Chat -type f -name "*.swift*" -exec grep -iHn "Behavior" {} \; | cut -d: -f-1 | xargs gsed -i '/import Foundation/a import RxSwift'
Nachteile:
- wenn
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'“ gesetzt ist, funktioniert das bei mir nicht …
Untersucht wird noch...
Antwort1
OK, ich habe die Lösung gefunden.
brew install gsed
- erforderlich
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}'
Wie sed
erstes Vorkommen:https://stackoverflow.com/a/9970915/887325
find
- alle Dateien finden,Reachability
die Text enthalten;cut
- einziger Pfadxargs
- Pfaddateien als Argument fürgsed
gsed
- Suche die ersteimport
Zeile, die {i\ enthält - füge eine neue Zeile ein:import RxReachability
Ich hoffe, dass diese Antwort mir im Alter von 90 Jahren noch nützlich sein wird.