2010-06-02 14 views

Antwort

49

In awk:

awk '$2 == "LINUX" { print $0 }' test.txt 

Siehe awk by Example für eine gute Einführung in awk.

In sed:

sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt 

Siehe sed by Example für eine gute Einführung in sed.

+0

was kann LINUX Linux oder Linux sein? – yael

+0

Die Seiten, die ich verlinkt habe, erklären, wie man Regexes in den jeweiligen Tools verwendet.Die Regex, die zu LINUX oder Linux passt, ist L (INUX | inux) (grob gesprochen; verschiedene Werkzeuge haben manchmal eine leicht unterschiedliche Syntax). Übrigens, wenn das Hausaufgaben sind, sollte es als solches markiert werden. –

+0

Wenn Sie möchten, dass die Übereinstimmung komplett ohne Berücksichtigung der Groß- und Kleinschreibung ist, sehen Sie sich die "toupper" (oder "tolower") Funktionen in "awk" an. –

4

Probieren Sie diese aus:

egrep -i '^\w+ LINUX ' myfile 

awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile 

sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile 

bearbeiten: Modifizierte für Groß- und Kleinschreibung

+0

Die Frage erwähnt explizit "awk" (und "sed" in einem Kommentar). –

+0

was ist mit LINUX Linux oder Linux? – yael

3

In GNU sed Groß- und Kleinschreibung Streichhölzer werden kann, die I Modifier:

sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip' 

Wird als das zweite Feld "Linux", "Linux", "Linux", "Linux" und andere robust entsprechen (nach dem ersten Feld, das beliebig Nicht-Leerzeichen Zeichen sein kann) und umgeben von einer beliebigen Menge (mindestens einem) von Leerzeichen (in erster Linie Leerzeichen und Tab, obwohl Sie [:blank:] verwenden können, um es streng zu beschränken).

4

Dies ist ein Fall, in dem Sie die schönen idiomatischen awk verwenden:

awk '$2=="LINUX"' file 

Das heißt:

  • Die Standardaktion von awk wenn sie in einem wahren Zustand ist die aktuelle Zeile drucken .
  • Da $2 == "LINUX" wahr ist, wann immer das 2. Feld LINUX ist, werden diese Zeilen gedruckt, in denen dies geschieht.

Im Fall, dass Sie alle diese Linien LINUX egal passend zu drucken, wenn es Groß- oder Klein ist, verwenden toupper() sie zu nutzen alle:

awk 'toupper($2)=="LINUX"' file 

Oder IGNORECASE mit einem dieser syntaxs :

awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file 
awk -v IGNORECASE=1 '$2=="LINUX"' file 
Verwandte Themen