2015-12-23 4 views
1

J'écris un script bash, qui à un moment donné utilise nslookup pour résoudre certains noms dans une boucle. Il est sortie ressemble à ceci:Bash Script: écris toutes les lignes de stdin dans le fichier sauf les trois premières

Server:   127.0.0.1 
Address:  127.0.0.1#53 

Non-authoritative answer: 
Name: example.org 
Address: 93.184.216.34 

Je voudrais enlever les trois premières lignes, sans avoir à écrire la sortie vers un fichier. J'ai essayé d'utiliser tail, mais je n'ai pas pu le lire depuis le STDIN.

nslookup "${name}" \ 
    | tail +2 - 

Cette tente de lire +2 fichier: tail: cannot open ‘+2’ for reading: No such file or directory

Comment puis-je redirigez la sortie de nslookup pour enlever les trois premières lignes, d'écrire tout cela dans un fichier plus tard, comme celui-ci:

while read name; do 
    nslookup "${name}" \ 
     | remove-three-lines \ 
     >> file.out 
done <"${nameFile}" 

Répondre

3

Pour démarrer la sortie du quatrième ligne en avant (en ignorant les 3 premières lignes):

nslookup "${name}" | tail -n +4 

Ou awk:

nslookup "${name}" | awk 'NR>3' 

Ou sed:

nslookup "${name}" | sed '1,3d' 
+0

J'ai toute 'boucle while' dans une fonction que j'appelle comme' doStuff> "$ {outputFile}" 'toutes les instructions' printf' de la fonction sont imprimées dans le fichier de sortie mais les lignes i de 'nslookup' dans' queue' sont imprimées sur stdout, savez-vous pourquoi? –

+1

@CelestialDragonofOsiris: Essayez: 'nslookup" $ {name} "| & tail -n +4>" $ {outputFile} "' car la sortie pourrait provenir de 'stderr' – anubhava

+1

Une réponse complète, si un peu sèche ... J'ai écrit une réponse 'sed', que je ne vois aucune raison de poster maintenant, qui est complémentaire de la tienne:' command | sed -n '4, $ p'' ... Je dois reconnaître que votre réponse exprime l'intention de OP d'une manière plus directe ... – gboffi

0

Qu'en est-ce:

while read name; do 
    echo $(nslookup "${name}" | tail -2) >> file.out 
done <"${nameFile}" 
+1

Quelle est la raison de répéter tout cela, ne devrait pas rediriger la sortie de la queue déjà être assez? –

+0

La recherche et la queue sont dans un sous-shell afin d'obtenir le stdin correct, puis la sortie de ce sous-shell est renvoyée et redirigée vers un fichier. –