Neue Zeile einfügen, wenn die Datei eine Zeichenfolge enthält

Neue Zeile einfügen, wenn die Datei eine Zeichenfolge enthält

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 sederstes Vorkommen:https://stackoverflow.com/a/9970915/887325

  • find- alle Dateien finden, Reachabilitydie Text enthalten;
  • cut- einziger Pfad
  • xargs- Pfaddateien als Argument fürgsed
  • gsed- Suche die erste importZeile, 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.

verwandte Informationen