J'ai file d'échantillon comme suit:
WEA { Direction = Input Tag = WriteEnable PortId = "A" } MEA { Direction = Input Tag = MemoryEnable PortId = "A" } CLKA { Direction = Input Tag = Clock PortId = "A" } TEST1A { Direction = Input Tag = None TieLevel = TestBench PortId = "A" SafeValue = "1'b0" }
J'essaie de replace PortId = "A"
comme PortId = "AB"
mais uniquement dans le module CLKA{ }
.
J'ai essayé d'exécuter certaines modifications sur le code donné comme
sed ':again;$\!N;$\!b again; s/{[^}]*}//g' file
sur le post précédent supprimer le text dans les accolades
J'ai essayé ce sed ':again;$\!N;$\!b again; s/CLKA {[^}]*}//g'
sed ':again;$\!N;$\!b again; s/CLKA {[^}]*}//g'
mais supprimé le CLKA { }
entier CLKA { }
Essaye ça:
sed '/CLKA/,/TEST1A/ { s/PortId = \"A/& B/; }' file
Cette command sed ajoute le caractère B
à la fin du motif PortId = "A
qui est entre deux mots CLKA
et TEST1A
.
Vous pouvez également utiliser start ( ^
) et end ( $
) de la ligne pour PortId = "A"
/ ne replace que PortId = "A"
dans le CLKA { ... }
. ^ CLKA {$
correspond à la ligne qui ne contient que
CLKA {
et ^ }$
correspond à la ligne si elle contient uniquement
}
CLKA { PortId = "A" } CLKA { Direction = Input Tag = Clock PortId = "A" }
sed '/^ CLKA {$/,/^ }$/ { s/PortId = \"A/& B/; }' file
CLKA { PortId = "A" } CLKA { Direction = Input Tag = Clock PortId = "AB" }
Notez que les espaces après ^
parce que vous avez un espace avant chaque ligne (dans votre exemple), si vous n'avez pas cet espace, supprimez-les.