2017-09-25 1 views
0

Je dispose d'un fichier de zone DNS qui ressemble à ce qui suit:lignes DEGAGER fichier de zone

record A 1.1.1.1 
     A 1.1.1.2 
     A 1.1.1.3 
other_record A 1.1.1.4 
      A 1.1.1.5 
another_rec A 1.1.1.6 

J'ai besoin d'extraire toutes les lignes qui appartiennent à enregistrer (de sorte que le premier et les deux dessous) sans des autres lignes (le fichier actuel a beaucoup plus d'enregistrements comme celui-ci, donc la première ligne est grepée et l'autre ci-dessous n'est pas une solution valide).

Résultat attendu:

record A 1.1.1.1 
     A 1.1.1.2 
     A 1.1.1.3 
+1

au moins, postez le résultat attendu – RomanPerekhrest

+0

@RomanPerekhrest fait. Merci. – IComeFromVilna

Répondre

0
awk '/^[^[:space:]]/{f = ($1=="record" ? 1 : 0)} f' file 
+0

Celui-ci fonctionne. Pouvez-vous expliquer la solution? Aussi, comment puis-je obtenir le contraire et supprimer "record"? Merci! – IComeFromVilna

+0

pour chaque ligne d'entrée qui ne commence pas par un espace, définissez une variable "trouvée" 'f' sur 1 si la ligne commence par" record "et 0 ​​sinon. Pour chaque ligne si 'f' est non nul, imprimez cette ligne. Échangez 1 et 0 pour obtenir le contraire. –

0

Cela pourrait fonctionner pour vous (GNU sed):

sed '/^record/{:a;n;/^\S/Q;ba};d' file 

Ce disparaît après la première occurrence de record, ou:

sed '/^\S/h;G;/^record/MP;d' file 

Ceci imprime toutes les occurrences de record.

+0

Cela fonctionne, pouvez-vous expliquer la solution? Aussi pouvez-vous expliquer comment supprimer le "record"? Merci! – IComeFromVilna

0

Vous pouvez aussi penser à l'aide d'un fichier zone dns parseurs disponibles dans différentes langues comme python, etc.

Une fois que vous avez une poignée sur le contenu du fichier de zone comme un objet alors son assez facile à manipuler la façon dont vous voulez .

J'ai obtenu celui-ci après avoir fait une recherche rapide sur le Web - https://github.com/blockstack/zone-file-py. (il y en a plein d'autres ... vous devez voir lequel fonctionne le mieux pour vous)

0

Pourriez-vous s'il vous plaît essayer de suivre et laissez-moi savoir si cela aide.

awk '/^[a-z]+/ && !/^record/{flag=""} /^record/{flag=1} flag' Input_file 
-1
awk '!/_/&&NR!=5' file 

record A 1.1.1.1 
     A 1.1.1.2 
     A 1.1.1.3