2011-01-31 3 views
2

Je voudrais obtenir la dernière ligne non vide d'un fichier en utilisant sed. J'ai pu obtenir le résultat attendu en utilisant deux sed pipe-line:Comment imprimer la dernière ligne non vierge en utilisant sed?

$ echo -e "\n\none\n\ntwo\n\n\nthree\n\n" | sed '/^$/d' | sed -n '$p' 
three 

Cependant, je me demande si est-il possible d'obtenir que l'utilisation d'une seule commande sed. Peut-être en copiant chaque ligne non vide dans le tampon les uns après les autres, en écrasant le contenu précédent et en imprimant le tampon à la fin? Je ne suis pas sûr si cela peut être fait dans sed, c'est juste ma conjecture.

S'il vous plaît ne me propose pas d'utiliser awk, queue, etc - je suis intéressé par sed. Je vous remercie.

Répondre

3

Peut-être:

sed -e '/^$/d' -e '$ !d' 

?

Autre façon avec le tampon de maintien:

sed -e '/^$/ !h 
     $ {x;p;}' 
+0

Benoit, la seconde manière avec le tampon de maintien est ce que je cherchais. Merci. – ak83

+0

Vous avez omis la -n la deuxième solution. –

3

Cela pourrait fonctionner pour vous:

echo -e "\n\none\n\ntwo\n\n\nthree\n\n" | 
sed '/^$/!h;$!d;g' 
three 
Questions connexes