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 -E
und, auf grep
Versionen, 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'