Skript zum Suchen nach 3 verschiedenen Benutzern online und Drucken dieser

Skript zum Suchen nach 3 verschiedenen Benutzern online und Drucken dieser

Ich versuche, ein Skript zu erstellen, in dem ein Benutzer drei verschiedene Argumente (Benutzernamen) eingeben kann, um zu sehen, ob er online ist.

Ich habe derzeit, who | grep "^$1"dass die angezeigt wird, wer dann gesucht wird, aber wenn ich versuche, $2 und $3 hinzuzufügen wie

who | grep "^$1" "^$2" "^$3"

es wird eine Fehlermeldung angezeigt, dass keine solche Datei oder kein solches Verzeichnis vorhanden ist, aber es funktioniert einwandfrei, wenn ich nur das einzelne Argument habe. Irgendwelche Vorschläge?

Antwort1

who | grep -e "^$1" -e "^$2" -e "^$3"sollte tun

Antwort2

Grep verhält sich je nach verwendetem Typ der regulären Ausdrucks-Engine unterschiedlich. Standardmäßig verwendet esGrundlegende reguläre Ausdrückekann aber auch verwendenErweiterte reguläre Ausdrückemit -Eund, auf grepVersionen, die diese Funktion unterstützen, Perl-kompatible reguläre Ausdrückemit -P.

BRE kann nur nach zwei Mustern suchen, nicht mehr. Die Syntax lautet:

grep 'pattern1\|pattern2'

ERE und PCRE können nach einer beliebigen Zahl suchen, ihre Syntax ist in dieser Hinsicht gleich, nur das Optionsflag ändert sich:

grep -E 'pattern1|pattern2|pattern3|patternN'
grep -P 'pattern1|pattern2|pattern3|patternN'

In Ihrem Fall könnten Sie also etwa Folgendes tun:

who | grep -E "^$1|^$2|^$3"

Antwort3

Ich würde empfehlen, so etwas zu tun:

who | awk '{print $1}'

awk druckt die erste Spalte oder die Namen der aktuell angemeldeten Benutzer.

Um es noch weiter einzugrenzen, wie Terdon hervorhob, lassen sich drei Argumente anführen:

who | awk -v one=$1 -v two=$2 -v three=$3 '$1==one||$1==two||$1==three'

verwandte Informationen