
ユーザーがオンラインであることを確認するために、3つの異なるパラメータ(ユーザー名)を入力できるスクリプトを作成しようとしています。
現在検索されている人を表示できます。who | grep "^$1"
たとえば、2ドルと3ドルを追加しようとすると
who | grep "^$1" "^$2" "^$3"
そのファイルやディレクトリがないというエラーが発生しますが、パラメータが1つしかない場合は正常に動作します。どんな提案がありますか?
答え1
who | grep -e "^$1" -e "^$2" -e "^$3"
すべきこと
答え2
Grepは、使用する正規表現エンジンの種類によって異なる動作をします。デフォルトでは、次を使用します。基本正規表現しかし、それも使用することができます拡張正規表現そして、この機能をサポートするバージョン -E
ではgrep
Perl互換正規表現そして-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'