Bonjour,
Sous ce titre long et pas forcément explicite, je cherche à récupérer un bloc de ligne spécifique dans un fichier qui ne peut être identifié que par une seule ligne.
Une fois cette ligne identifiée, je souhaite afficher les 3 lignes qui se trouvent au-dessus. (Cela peut être fait facilement avec un grep -B 3 maligne monfichier)
La où ça se corse, c'est que je dois remplacer 3 valeurs sur ces 3 lignes en me basant sur 2 Regex (Adresse MAC + Nom du serveur) puis réintégrer ces modifications dans le fichier en remplaçant cette ensemble de ligne dans le fichier. Cela doit être un remplacement en lieu et place de l'ancien.
Le tout doit tenir si possible sur une seule ligne
Voici un extrait de mon fichier :
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 host SRV00844 { option host-name "SRV00864.mydomain.fr"; hardware ethernet 00:50:56:9b:44:94; fixed-address 223.129.130.16; } host SRV00847 { option host-name "SRV00865.mydomain.fr"; hardware ethernet 00:50:56:9b:36:8e; fixed-address 223.129.130.17; } host SRV00868 { option host-name "SRV00438.mydomain.fr"; hardware ethernet 00:50:56:9b:36:8e; fixed-address 223.129.130.18; } host SRV00898 { option host-name "SRV00852.mydomain.fr"; hardware ethernet 00:50:56:9b:54:2a; fixed-address 223.129.130.19; }
Sur ce bloc de ligne, je veux remplacer le nom du serveur et l'adresse MAC.
J'utilise la ligne 223.129.130.16; comme point de repère pour pouvoir modifier mes valeurs. Je n'ai aucune idée des valeurs qui seront affichées sur les 3 lignes du dessus.host SRV00844 {
option host-name "SRV00864.mydomain.fr";
hardware ethernet 00:50:56:9b:44:94;
fixed-address 223.129.130.16;
}
Tout ce que je sais, c'est que je dois remplacer ces valeurs (Serveur + Adresse MAC) avec d'autres que je connais en utilisant les regex suivants:
J'ai tenté différents essais avec le SED mais je n'ai pas réussi...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Serveur : SRV00[1-9]\d{2} Adresse MAC : ([0-9a-f]{2}:){5}([0-9a-f]{2})
Est-ce qu'un esprit avisé pourrait m'éclairer sur cette requête ? SED est t'il la bonne approche pour ce cas de figure ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Essai 1 (Impossible de récupérer les 3 dernières lignes sous SED) sed -i 's/*\n{3}223.129.130.16;/host SRV00417 {\n option host-name "SRV00417.mydomain.fr";\n hardware ethernet 00:50:56:9b:45:29;\n fixed-address 223.129.130.16;/g' MYFILE Essai 2 (Remplace tous les serveurs et les adresses MAC par ceux que j'ai défini) tac MYFILE | sed -ne '/223.129.130.16;/,+3p' | sed -i 's/\([0-9a-f]\{2\}:\)\{5\}\([0-9a-f]\{2\}\)/00:50:56:9b:45:29/; s/SRV00[1-9][0-9]\{2\}/SRV00417/g' MYFILE
En vous remerciant d'avance.








Répondre avec citation
Partager