Rechercher : dans
Par :

Modification d'un fichier texte en bash

Dernière réponse le 6 mai 2008 à 09:26:53 Marui, le 5 mai 2008 à 13:38:33 
 Signaler ce message aux modérateurs

Bonjour,
Je souhaiterais modifier un champ précis dans un fichier de configuration d'un switch.
Le fichier se présente sous cette forme et les parties qui m'intéresse sont celles ci:
...
VLAN (
NAME=DEFAULT_VLAN
PORT_MAP=ffffff000000
MODE=222222
)

VLAN (
NAME=test
PORT_MAP=ffffff000000
MODE=------
)
...

J'aimerais assigner tel ou tel port dans le vlan test, ou dans le default, suivant des critères que j'ai fais dans un autre script. Le problème c'est que ces critères vont changer, et ces ports devront être assignés dynamiquement.
Seul la ligne "MODE" m'intéresse, mais je ne vois pas comment modifier juste un caractère de cette ligne précise ( un "-" indique que le port n'est pas associé à ce vlan, et un "2" qu'il lui est associé).

Un exemple de fonctionnement:
Je me base sur l'adresse MAC de l'ordinateur qui souhaite se connecter (je sais la sécurité est nulle dans ce cas précis).
l'ordinateur A se branche sur le port 1
son adresse MAC est connue?
si oui :le port 1 est associé au vlan default
si non : le port 1 est associé au vlan test

Merci d'avance.

Configuration: Linux
Firefox 2.0.0.14

Meilleures réponses pour « Modification d'un fichier texte en bash » dans :
Extensions de fichiers VoirIntroduction aux fichiers Un fichier est une suite d'informations binaires, c'est-à-dire une suite de 0 et de 1. Ce fichier peut être stocké pour garder une trace de ces informations. Un fichier texte est un fichier composé de caractères stockés...
Fichier TXT VoirFormat TXT Un fichier TXT est un fichier texte, c'est-à-dire un simple fichier contenant du texte au format ASCII. Pour ouvrir ou modifier un tel fichier, il suffit d'utiliser le bloc-notes ou un éditeur de texte traditionnel.

1

jipicy, le 5 mai 2008 à 14:25:36

Salut,

Si j'ai bien compris, tu veux inverser les champs "MODE" en fonction du résultat de ta requête sur l'adresse MAC ?

En partant de ton exemple, voilà une solution pour le faire (rajouter l'option '-i.bak' pour une modification effective du fichier original et la création d'une copie de sauvegarde avec extension ".bak") :

[tmpfs]$ cat vlan
...
VLAN (
NAME=DEFAULT_VLAN
PORT_MAP=ffffff000000
MODE=222222
)

VLAN (
NAME=test
PORT_MAP=ffffff000000
MODE=------
)
...
[tmpfs]$ sed '/DEFAULT_VLAN/{n;n;s/\(MODE=\).*/\1------/};/test/{n;n;s/\(MODE=\).*/\1222222/}' vlan
...
VLAN (
NAME=DEFAULT_VLAN
PORT_MAP=ffffff000000
MODE=------
)

VLAN (
NAME=test
PORT_MAP=ffffff000000
MODE=222222
)
...
[tmpfs]$
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

2

Marui, le 5 mai 2008 à 14:37:10

C'est exactement ça !!
Il me suffit juste de modifier tel ou tel "port" pour coller à ce dont j'ai besoin.
Merci beaucoup!!!!

Répondre à Marui

3

Marui, le 5 mai 2008 à 14:58:14

J'ai une question rapport à ta commande. Si je ne souhaite modifier que le 5 caractère par exemple ( le deuxième '2' de vlan default en '-'), il me suffit d'utiliser les expressions régulières?

Répondre à Marui

4

jipicy, le 5 mai 2008 à 15:05:05

[tmpfs]$ sed '/DEFAULT_VLAN/{n;n;s/2/-/2};/test/{n;n;s/-/2/5}' vlan
...
VLAN (
NAME=DEFAULT_VLAN
PORT_MAP=ffffff000000
MODE=2-2222
)

VLAN (
NAME=test
PORT_MAP=ffffff000000
MODE=----2-
)
...
[tmpfs]$;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

5

Marui, le 5 mai 2008 à 15:09:56

Merci , j'allais poster la réponse tellement elle était évidente...
Merci beaucoup en tous cas! :)

Répondre à Marui

6

Marui, le 6 mai 2008 à 09:14:14

C'est bizarre, cette commande devrai marcher non?

sed '/DEFAULT_VLAN/{n;n;s/\(MODE=\)./\1-/5};/test/{n;n;s/\(MODE=­\)./\12/5}' vlan

Répondre à Marui

7

jipicy, le 6 mai 2008 à 09:22:24

Ben non.
Si tu veux juste changer le 5ème caractère se trouvant après le signe égale, il te faut employer la syntaxe donnée dans mon précédent message...
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

8

 Marui, le 6 mai 2008 à 09:26:53

D'accord.
C'est qu'hier j'avais fait ce test :

sed '/DEFAULT_VLAN/{n;n;s/\(MODE=\)./\1-/1};/test/{n;n;s/\(MODE=­\)./\12/1}' vlan
Et donc ça changeai bien le premier caractère.
J'en avais déduis que ça pouvait fonctionner en changeant le '1' par le Nième caractère.
Bref,
Merci en tous cas :)

Répondre à Marui
Collection CommentÇaMarche.net