2012-02-16 1 views
1

Comme le dit le sujet, j'essaie de trouver un bon moyen de mettre à jour un fichier de configuration en utilisant bash. Le plan est de chercher un motif, ajouter une correspondance à #, puis insérer une nouvelle chaîne ci-dessous. Par exempleBash, chercher un motif, ajouter une correspondance aveC#, insérer une nouvelle chaîne ci-dessous

fichier

avant:

key1=value1 
key2=value2 
key3=value3 

Bash mettre à jour key2, faire key2 = test

fichier

après:

key1=value1 
#key2=value2 
key2=test 
key3=value3 

Répondre

2

est ici un script bash pour faire

#!/bin/bash 
sed -i -r -e "s/^($2)=(.*)$/#$2=\2\n$2=$3/" $1 

Vous pourrait alors l'utiliser comme ceci pour effectuer votre exemple:

./update configfile key2 test 
2
 
$ sed '/key2/{ s/^/#/; a\ 
key2=test 
}' input 
0

Il est pas partie jusqu'à ce que vous le faites dans awk

awk '$0 ~ key{$0="#" $0 "\n" key "test"}1' key="key2=" infile 
0

Cela pourrait fonctionner pour vous:

cat <<! >changes.txt 
> key2=test 
> ! 
sed 's|\([^=]*\).*|/^\1/s/.*/#\&\\n&/|' changes.txt | sed -i -f - file 
cat file 
key1=value1 
#key2=value2 
key2=test 
key3=value3 
Questions connexes