Script shell pour modifier un fichier texte

Script shell pour modifier un fichier texte - Codes et scripts - Linux et OS Alternatifs

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
Reply

Marsh Posté le 15-09-2004 à 08:05:34   

Reply

Marsh Posté le 15-09-2004 à 08:44:31    

avec la commande sed : man sed

Reply

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....


---------------
Tu sais que tu ne sais rien? Tu es sur la voie de la sagesse
Reply

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


---------------
Dommage :-) | chess games
Reply

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?


---------------
Tu sais que tu ne sais rien? Tu es sur la voie de la sagesse
Reply

Marsh Posté le 15-09-2004 à 15:53:50    

sed '/^ACCEPT/s/\([0-9.]\+\)/1.2.3.4/"

Reply

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?


---------------
Tu sais que tu ne sais rien? Tu es sur la voie de la sagesse
Reply

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...


---------------
Tu sais que tu ne sais rien? Tu es sur la voie de la sagesse
Reply

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é.

Reply

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


---------------
Tu sais que tu ne sais rien? Tu es sur la voie de la sagesse
Reply

Marsh Posté le 16-09-2004 à 09:51:15   

Reply

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)


---------------
Tu sais que tu ne sais rien? Tu es sur la voie de la sagesse
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed