2016-07-08 13 views
1

Ich bin mit bash beginnen und ich möchte meine IP in einer .txt-Datei analysieren es zu finden. Diese ist ein Beispiel für einen Teil der Datei: "Direc inet. 192 ****** Difus .:"Wie extrahiert man eine Zeichenfolge zwischen zwei Mustern in Bash

Der Weg Ich denke an wird der gesamte Text zwischen die Suche "inet:" und " ". Mein bisher größter Ansatz ist es, die gesamte Zeile mit "grep inet:" zu bekommen, aber ich kann nicht herausfinden, wie man nur die IP bekommt, nicht die ganze Zeile mit der IP.

Vielen Dank!

Antwort

0

Da Sie auf Linux sind, können Sie die Vorteile der GNU grep ‚s -o und -P Optionen nehmen:

grep -oP '(?<= inet:)[^ ]+' file.txt 

Beispiel:

$ grep -oP '(?<= inet:)[^ ]+' <<<'Direc. inet:192.****** Difus.:' 
192.****** 
  • -o sagt grep zu geben Sie nur die übereinstimmenden Teile jeder Zeile aus.

  • -P aktiviert Unterstützung für PCREs (Perl-kompatible reguläre Ausdrücke), die Look-behind Assertionen wie (?<= inet:) unterstützen, die einen Unterausdruck (inet:, in diesem Fall), ermöglichen in passender teilnehmen kann, ohne dass erfasst (zurückgegeben) als Teil der übereinstimmenden Zeichenfolge.

  • [^ ]+ dann einfach erfasst alles nach inet: bis zum ersten Leerzeichen char. (Der Zeichensatz [^ ] stimmt mit jedem Zeichen überein, das nicht (^) ein Leerzeichen ist, und + stimmt mit diesem Satz 1 oder mehrere Male überein).

1

Perl zur Rettung:

perl -ne 'print $1, "\n" if /inet:([^ ]+)/' 
  • -n liest die Eingangs Zeile für Zeile;
  • [^ ] ein Zeichen übereinstimmt, kein Raum sein
  • + bedeutet das Zeichen vorhanden ist, müssen ein oder mehrere Male
  • (...) eine Capture-Gruppe erstellt, wird die erste Capture-Gruppe als $1 verwiesen
0

Versuchen Sie die Kombination awk und grep. Unterhalb der Lösung kann Link 1 helfen. Lin 2

+0

Bitte vermeiden Sie [nur Link-Antworten] (http://meta.stackoverflow.com/tags/link-only-answers/info). – mklement0

Verwandte Themen