オンラインで3人の他のユーザーを検索して印刷するスクリプト

オンラインで3人の他のユーザーを検索して印刷するスクリプト

ユーザーがオンラインであることを確認するために、3つの異なるパラメータ(ユーザー名)を入力できるスクリプトを作成しようとしています。

現在検索されている人を表示できます。who | grep "^$1"たとえば、2ドルと3ドルを追加しようとすると

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

そのファイルやディレクトリがないというエラーが発生しますが、パラメータが1つしかない場合は正常に動作します。どんな提案がありますか?

答え1

who | grep -e "^$1" -e "^$2" -e "^$3"すべきこと

答え2

Grepは、使用する正規表現エンジンの種類によって異なる動作をします。デフォルトでは、次を使用します。基本正規表現しかし、それも使用することができます拡張正規表現そして、この機能をサポートするバージョン -EではgrepPerl互換正規表現そして-P

BREは2つのパターンしか検索できません。構文は次のとおりです。

grep 'pattern1\|pattern2'

EREとPCREは任意の数を検索でき、構文はこの点で同じで、オプションフラグのみが変更されます。

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

したがって、あなたの場合は、次のことができます。

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

答え3

私はそうすることを推薦する:

who | awk '{print $1}'

awkは、最初の列または現在ログインしているユーザー名を印刷します。

Terdenが指摘したように、これを3つの主張にさらに絞り込む。

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

関連情報