在線搜尋 3 個不同用戶並列印的腳本

在線搜尋 3 個不同用戶並列印的腳本

我正在嘗試創建一個腳本,用戶可以在其中輸入 3 個不同的參數(用戶名)來查看他們是否在線上。

我目前who | grep "^$1"可以顯示搜尋到的人,但是當我嘗試新增 $2 和 $3 時,例如

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

它給出一個錯誤,指出沒有這樣的文件或目錄,但是當我只有一個參數時它工作正常。有什麼建議麼?

答案1

who | grep -e "^$1" -e "^$2" -e "^$3"應該做

答案2

Grep 的行為有所不同,取決於其使用的正規表示式引擎的類型。預設情況下它使用基本正規表示式但也可以使用擴展正規表示式-E和,在grep支援此功能的版本上, Perl 相容的正規表示式-P

BRE 只能搜尋兩種模式,不能再搜尋更多。語法是:

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 將列印第一列或目前登入的使用者名稱。

正如特登所指出的,進一步將其縮小為三個論點:

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

相關內容