Ich habeNur Druckzeilen, wo das zweite Feld einige Kriterien erfüllt
1 LINUX param1 value1
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4
I awk müssen alle Linien drucken, in denen $2
LINUX
ist.
Ich habeNur Druckzeilen, wo das zweite Feld einige Kriterien erfüllt
1 LINUX param1 value1
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4
I awk müssen alle Linien drucken, in denen $2
LINUX
ist.
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
.
was kann LINUX Linux oder Linux sein? – yael
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. –
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. –
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
Die Frage erwähnt explizit "awk" (und "sed" in einem Kommentar). –
was ist mit LINUX Linux oder Linux? – yael
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).
Dies ist ein Fall, in dem Sie die schönen idiomatischen awk
verwenden:
awk '$2=="LINUX"' file
Das heißt:
awk
wenn sie in einem wahren Zustand ist die aktuelle Zeile drucken .$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
besser, wenn es durch sed THX wird – yael