我正在嘗試創建一個腳本,用戶可以在其中輸入 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'