Sed: Comment remplacer une chaîne est trouvée après un modèle spécifique se trouve dans un fichier
Si j'ai la liste suivante dans un fichier:
integer, parameter :: ni = 1024
integer, parameter :: nj = 256
integer, parameter :: nk = 16
et souhaitez faire une recherche basée sur la chaîne de ni'=', puis remplacer la chaîne de caractères qui suit (dans ce cas, '1024') avec une nouvelle chaîne de caractères comme '512' par exemple (je tiens à préserver l'espace). Comment puis-je utiliser sed pour cela? Remarque que je voudrais juste essentiellement essuyer tout ce qui vient après le signe égal, c'est parce que parfois, la chaîne ne sera pas un simple entier, il pourrait être quelque chose comme " 1.D0'. Et, dans certains cas, il peut y avoir des commentaires à l'avance. Donc, je veux juste effacer tout ce qui est en face du signe égal et de la remplacer par la nouvelle valeur.
Le résultat serait:
integer, parameter :: ni = 512
integer, parameter :: nj = 256
integer, parameter :: nk = 16
Vous devez vous connecter pour publier un commentaire.
GNU sed prend en charge les expressions régulières étendues si vous lui donnez l'
-r
drapeau.Mieux encore, un match pour de multiples espaces.
La
\1
est une référence à ce qui est mis en correspondance des parenthèses( )
, afin de remplacer avec\1
et une nouvelle valeur.Si je vous comprends bien, quelque chose comme ça devrait le faire:
sed 's/\(ni = \).*/\1REPLACEMENT/'
Cela semble plausible pour le contexte entourant le match spécifié afin de minimiser les chances de trouver
ni
quelque part dans une autre chaîne.sed -e 's/:: ni = [0-9]+$/:: ni = 512/'
sed
soutien+
sans autres commutateurs; beaucoup ne le font pas et POSIX ne les oblige pas à le faire. Vous pouvez utiliser[0-9]\{1,\}
pour le faire, mais ce que j'ai écrit est plus facile à comprendre.