目前,當我在我創建的訪客組上運行 grep 命令時
grep visitors:x:1011: /etc/group
這是上述命令的示例結果,因為實際結果太長。
visitors:x:1011:ellipsiscoterie,magnetcommonest,wizardmeans,beakskeletal,lemonwellmade,ralphpaperclips etc..
我如何顯示上述結果,如下所示(沒有訪問者:x:1101 并分隔逗號),因為我很難這樣做。
ellipsiscoterie
magnetcommonest
wizardmeans
beakskeletal
lemonwellmade
ralphpaperclips
uj5u.com熱心網友回復:
我建議使用sed而不是grep
sed -n -e 's/^visitors\:x\:1011\://p' /etc/group | tr ',' '\n'
UPD:sed部分的詳細解釋在這里。tr你可以在這里找到例子
uj5u.com熱心網友回復:
一種選擇是使用awk:
awk -F: '$1 == "visitors" {
size = split($4, users, ",");
for(i=1; i<=size; i) print users[i];
exit }' /etc/group
-F:-:用作欄位分隔符$1 == "visitors"- 如果第一個欄位匹配,則visitors執行以下陳述句(在{...內})size = split($4, users, ",");- 拆分第 4:th 欄位,并將結果存盤在陣列中users。回傳元素的數量users并將其放入size。- 該
for回圈-遍歷所有元素users,并列印出來。 exit- 終止awk- 無需繼續閱讀檔案的其余部分。
uj5u.com熱心網友回復:
查詢組和用戶的一個好方法是使用該getent命令,因為它也適用于 ldap 系統。
$ getent group visitors | cut -d: -f4 | tr ',' '\n'
在標準系統上,這將始終有效,因為用戶名和組名不能包含 <comma>-character 或 <semi-colon>-character。(如果你使用的是非標準的 linux 或 Unix 系統,請查看 man useradd并man groupadd檢查用戶名和組名規則)
uj5u.com熱心網友回復:
使用awk,您可以將欄位設定為冒號,-F:并檢查字串是否以visitors:x:1011:
由于逗號分隔值似乎總是在末尾,因此將最后一個欄位拆分$NF為逗號并回圈拆分值。
awk -F: '
/^visitors:x:1011:/ {
count=split($NF, ary, ",");
for(i=1; i<=count; i ) print ary[i];
}' /etc/group
uj5u.com熱心網友回復:
使用您顯示的樣本,請嘗試以下awk程式。
awk -F':' '/^visitors:x:1011/ && NF==4{gsub(/,/,ORS,$4);print $4}' /etc/group
或者,如果visitors:x:1011您的檔案中只出現一次條目,請嘗試以下操作:
awk -F':' '/^visitors:x:1011/ && NF==4{gsub(/,/,ORS,$4);print $4;exit}' /etc/group
解釋:簡單的解釋是,:為所有行制作欄位分隔符。然后在主程式中,檢查條件是否行開始visitors:x:1011并且欄位數為 4,然后在第 4 個欄位中用新行(ORS)全域替換逗號并列印它。
或者,如果有一行visitors:x:1011出現一次并且第 4 個欄位為 NULL(意味著不存在條目,這在某些情況下很明顯)并且您想為其列印訊息,然后嘗試以下操作:
awk -F':' '/^visitors:x:1011/ && NF==4{if($4==""){print "NO entry found in /etc/group"} else{gsub(/,/,ORS,$4);print $4};exit}' /etc/group
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323955.html
上一篇:是否可以恢復您使用Github網站洗掉的已洗掉分支?
下一篇:在bash中獲取上次執行的命令
