Script shell pour modifier un fichier texte - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 15-09-2004 à 09:13:01
La commande sed permet de remplacer une chaîne précise non? je ne sais pas si ça résoudrait mon problème.
Je vais être plus précis, je veux modifier une adresse IP dans un fichier. Cette adresse IP je ne la connaît pas d'avance, je sais par contre qu'elle se trouve juste en dessous d'une ligne de commentaire donnée.
Par exemple :
#####################################################
# xxx.xxx.xxx.xxx représente l'adresse IP a modifier
ACCEPT net:xxx.xxx.xxx.xxx loc 3389
##########################################################
Lorsque le script accède au fichier, il y a déjà une adresse IP de renseignée, il faut donc la modifier.
C'est une règle de filtrage sur un firewall. Le script va recevoir en argument l'adresse IP a autoriser. Il doit donc modifier la règle en mettant à jour l'adresse IP.
Est-ce possible? je pense que oui mais je ne vois pas....
Marsh Posté le 15-09-2004 à 09:15:28
ben ne met pas en brute la valeur de l'adresse IP, utilise plutot des variables
tous les parametres passés à un scripts sont récupérables par les variables $1 $2 $3...
$0 etant le nom du script
Marsh Posté le 15-09-2004 à 09:27:34
Oui l'adresse IP serait passée au shell script en argument donc je la récupère bien avec un $1 met ensuite il s'agit d'aller mettre à jour le fichier de configuration du firewall. Dans ce fichier là tout doit (je pense) être affiché.
Je pensais donc ouvrir le fichier de conf depuis le shell script, me rendre à la ligne désirée et remplacer l'adrese IP existante par le contenu de $1.
La démarche est mauvaise? Ou peut-être c'est la façon dont j'interprete les choses qui l'est?
Marsh Posté le 15-09-2004 à 16:01:16
Je suppose que cette instruction serait parfaite si le fichier de configuration en question ne contenait qu'une seule ligne comprenant le mot ACCEPT. Mais pour mon cas, est-ce possible de me repérer plutôt par rapport à la ligne de commentaire précédente et, par exemple de remplacer la ligne qui suit par une nouvelle ligne comprenant la nouvelle adresse?
Marsh Posté le 15-09-2004 à 16:02:52
petite précision, je ne souhaite modifier qu'une seule règle parmis beaucoup d'autres...
Marsh Posté le 15-09-2004 à 16:31:35
C'est pas bcp plus dur
sed '/le commentaire/,+1s/\([0-9.]\+\)/1.2.3.4/"
Mais la ça va te faire la modif sur chaque ligne qui suit immeciatement le commentaire. Si tu veux le faire qu'une fois c'est un peu plus compliqué.
Marsh Posté le 16-09-2004 à 09:51:15
Non le traitement ne doit être effectué que sur une ligne seulement. je vais essayer ton code merci beaucoup
Marsh Posté le 19-09-2004 à 08:35:09
finalement je me suis basé sur le numéro de ligne et j'ai utilisé ton script ça fonctionne très bien.
Merci beaucoup!
sed -e 322"s/\([0-9.]\+\)/$1/"
(le traitement se fait sur la ligne 322)
Marsh Posté le 15-09-2004 à 08:05:34
Je suis certain que c'est simple mais... JE NE SAIS PAS FAIRE.
J'ai par exemple un fichier FIC contenant :
ceci est
un exemple
1234 5678 9012
de fichier
Je voudrais pouvoir remplacer par exemple la chaîne 5678 par une chaîne envoyée en argument.
Comment faire en sh ou bash? Je saurais éventuellement faire ça en Perl mais je n'ai pas l'interpreteur installé (et je ne peux pas l'installer...).
Merci.
---------------
Tu sais que tu ne sais rien? Tu es sur la voie de la sagesse