Kniffelig: Ausgabe von portmaster mit Bordmitteln auswerten

Bash, Shell, PHP, Python, Perl, CGI
User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Kniffelig: Ausgabe von portmaster mit Bordmitteln auswerten

Post by daemotron » 2008-05-25 10:26

Unter FreeBSD kann man ein kleines Tool namens portmaster dazu nutzen, um sich eine Liste installierter Ports incl. fälliger Updates anzeigen zu lassen. Die Ausgabe sieht dabei so aus (beispielhafter Auszug):

Code: Select all

portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> compat6x-i386-6.3.603000.200801
===>>> cppunit-1.12.0
===>>> evieext-1.0.2
===>>> nasm-2.02,1
===>>> patch-2.5.4
===>>> portaudit-0.5.12
===>>> portmaster-2.2

===>>> Branch ports (Have dependencies, are depended on)
===>>> gtk-2.12.9_3
===>>> gtk-engines2-2.14.1
===>>> gtk-xfce-engine-2.4.2
===>>> gtkspell-2.0.11_6
        ===>>> New version available: gtkspell-2.0.13
===>>> gvfs-0.2.3_3

===>>> 570 total installed ports
        ===>>> 1 has a new version available

Ich möchte mir jetzt mit einem Shell-Skript regelmäßig fällige Updates zumailen lassen. Ich würde mir aber gerne sowohl alte als auch neue Version ausgeben lassen. Was ich also aus der Liste herausfiltern müsste, wären die Zeilen

Code: Select all

===>>> gtkspell-2.0.11_6
        ===>>> New version available: gtkspell-2.0.13

Momentan gelingt es mir nur, die zweite Zeile herauszufiltern:

Code: Select all

portmaster -L | grep -v '^===' | grep 'New version available'
        ===>>> New version available: gtkspell-2.0.13

Hat jemand von Euch eine Idee, wie ich die darüber liegende Zeile erwischen könnte? Alles, was auf der Shell so geht (sed, awk, grep) ist erlaubt :wink:

P. S. portmaster sollte möglichst nur einmal dabei ausgeführt werden, da das Programm eine ziemliche Laufzeit hat und auch kräftig Disk I/O erzeugt.

User avatar
nyxus
RSAC
Posts: 697
Joined: 2002-09-13 08:41
Location: Lübeck

Re: Kniffelig: Ausgabe von portmaster mit Bordmitteln auswerten

Post by nyxus » 2008-05-25 10:46

vielleicht die Ausgabe in eine temporäre Datei umleiten, diese mit tac ausgeben und dann mit grep filtern und jeweils die nächste Zeile mit ausgeben?

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: Kniffelig: Ausgabe von portmaster mit Bordmitteln auswerten

Post by Roger Wilco » 2008-05-25 12:49

Bei (GNU?) grep gibt es die Optionen -B (before) und -A (after), welche auch die n Zeilen vor bzw. nach der Zeile mit dem Match ausgibt. Reicht das? ;)

User avatar
Joe User
Project Manager
Project Manager
Posts: 11602
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Kniffelig: Ausgabe von portmaster mit Bordmitteln auswerten

Post by Joe User » 2008-05-25 13:09

Code: Select all

portmaster -L | grep -B 1 'New version available' | awk '{print $NF}'

Wie Du das Ergebnis verarbeitest, überlasse ich Dir selbst ;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: Kniffelig: Ausgabe von portmaster mit Bordmitteln auswerten

Post by daemotron » 2008-05-25 14:32

Moin ihr Shell-Götter,
vielen Dank - grep -B war die Lösung (FreeBSD hat kein eigenes grep implementiert und nutzt GNU grep)

@ Joe User: was gibt's da noch groß zu verarbeiten, außer das Ergebnis noch an mail zu übergeben? :wink: