2017-10-05 2 views
2

J'essaie de faire une substitution de variable dans sed/bash.Substitution de variable dans sed/bash

J'ai vu cet exemple disponible here, mais il ne remplace pas les données si nécessaire. La valeur observée à la ligne 20 de $ C_CONF est $RAM, quand je veux que ce soit 100. La ligne 20 de $C_CONF est AllowedRAMSpace=SomeValue et j'aimerais changer cette valeur à la volée

C'est l'astuce que j'ai créée, mais c'est très moche et inefficace.

32 for RAM in 100 #80 60 40 20 
33 do 
34  sudo sed -i -re 's/(AllowedRAMSpace=)[^=]*$/\1"'"$RAM"'"/' $C_CONF 
35  sudo sed -i '20s/"//' $C_CONF 
36  sudo sed -i '20s/"//' $C_CONF 
37 done 

Quelle est l'autre manière?

+4

ne pouvez pas reproduire votre problème. 'sed -re 's/(AllowedRAMSpace =) [^ =] * $/\ 1'" $ RAM "'/'' fonctionne comme un charme et rend vos autres commandes 'sed' inutiles. –

+0

On dirait que c'est l'affaire. J'avais un '' '' supplémentaire. Si vous collez cela comme réponse, je l'accepterai. – tandem

Répondre

1

Essayez d'utiliser awk à la place

awk 'BEGIN{RAM=100}NR==20{print gensub(/(AllowedRAMSpace=)([^=].*$)/,"\\1"RAM,"g", $0)}' filename