Modification d'un fichier texte en bash
Marui
-
Marui -
Marui -
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.
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.
A voir également:
- Modification d'un fichier texte en bash
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
7 réponses
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") :
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]$;-))
C'est exactement ça !!
Il me suffit juste de modifier tel ou tel "port" pour coller à ce dont j'ai besoin.
Merci beaucoup!!!!
Il me suffit juste de modifier tel ou tel "port" pour coller à ce dont j'ai besoin.
Merci beaucoup!!!!
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?
[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]$;-))
...
VLAN (
NAME=DEFAULT_VLAN
PORT_MAP=ffffff000000
MODE=2-2222
)
VLAN (
NAME=test
PORT_MAP=ffffff000000
MODE=----2-
)
...
[tmpfs]$;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question