ubuntuusers.de

grep - nur zweiten Treffer ausgeben

Status: Ungelöst | Ubuntu-Version: Ubuntu 13.04 (Raring Ringtail)
Antworten |

zapppp

Anmeldungsdatum:
15. September 2013

Beiträge: 18

Kurze Frage:

sensors | grep 'temp1' | cut -c16-18

"temp1" wird in zwei Zeilen gefunden. Ich brauche nur den 2. Treffer. Wie geht das?

Danke. ☺

OldNewbie

Anmeldungsdatum:
15. Januar 2008

Beiträge: 57

Wohnort: Berlin

Hallo zapppp,

Das geht mit tail (siehe Beispiele im verlinkten Wiki-Artikel).

Grüße, Herbert

zapppp

(Themenstarter)

Anmeldungsdatum:
15. September 2013

Beiträge: 18

Dankeschön. ☺

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13215

OldNewbie schrieb:

Das geht mit tail (siehe Beispiele im verlinkten Wiki-Artikel).

Kommt darauf an: wenn es noch mehr Treffer geben kann und man genau den zweiten erwischen will, ist sed besser:

1
sensors | fgrep 'temp1' | sed -ne 2p | cut -c16-18

Übrigens: hier kann man auch fgrep nehmen. Du suchst ja nicht nach einem Regulären Ausdruck.

Ciao

robert

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

zapppp schrieb:

"temp1" wird in zwei Zeilen gefunden. Ich brauche nur den 2. Treffer. Wie geht das?

Dein Verfahren mit dem abzählen der Zeichen (cut) erscheint mir nicht so richtig robust, jedenfalls schneidet es bei mir die falschen Zeichen heraus.

Da wäre es wohl besser, das ganze Filtern nach Textfeldern, in einem Schritt mit sed oder awk zu machen. Das ist viel sauberer und übersichtlicher:

sensors  |  sed -n '/^temp1/{ s/.*   //; s/°.*//; h }; ${ g; p }'
sensors  |  awk '/^temp1/ { sub("°C",""); t= $2 } END{ print t }'

wobei awk von der Lesbarkeit des Codes her natürlich viel besser ist.

LG,

track

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13215

track schrieb:

Da wäre es wohl besser, das ganze Filtern nach Textfeldern, in einem Schritt mit sed oder awk zu machen. Das ist viel sauberer und übersichtlicher:

sensors  |  sed -n '/^temp1/{ s/.*   //; s/°.*//; h }; ${ g; p }'
sensors  |  awk '/^temp1/ { sub("°C",""); t= $2 } END{ print t }'

wobei awk von der Lesbarkeit des Codes her natürlich viel besser ist.

Einerseits hast Du Recht, aber irgendwie habe ich da einen Smiley vermisst. 😬

Cheers

robert

HannahManah

Anmeldungsdatum:
30. August 2013

Beiträge: 5

Danke für die Information. Habt mir ebenfalls geholfen ☺)

Grüße, Hannah

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13215

Mir ist noch eine Ergänzung zur Lösung von track eingefallen, die sicher stellt, dass genau der zweite Eintrag ausgegeben wird:

1
sensors | awk '/^temp1/ { if ( ++c == 2 ) { sub("°C",""); print $2 } }'

Ciao

robert

Antworten |