2016-02-29 129 views
0

所以我有這行代碼,我一直試圖轉換成只有一個awk命令,但迄今爲止一直沒有成功(不顯示任何內容)。我不是最有經驗的awk,所以我仍在努力使用它。如果有人能給我一些指導,並指出我做錯了什麼,將不勝感激。這條單行命令將拉出所有用戶的列表,並刪除所有不必要的信息,只顯示一個名稱列表。用單awk命令替換grep和sed

ipa group-show ipausers | grep "Member users: | sed "s/,//g" | 
sed "s/Member users: //g" | sort 

我嘗試了幾種不同的方法,但最近我嘗試過的是;

ipa group-show | awk '/Member users/ { sub ("Member users: ", "") }' 

這顯示什麼...

從我的理解,AWK能夠搜索,並很容易地去除多餘的文字,會是一個堅實的用例什麼,我試圖完成。我只是無法完成我所嘗試的。引出我幾個問題...是否將grepsed替換爲awk的理想情況,或者應該在此情況下使用grepsed?我在做什麼錯誤awk(可能很多我確定哈哈)。從ipa group-show

Group name: ipausers 
Description: something something 
Member users: user1, user2, user3, user4, user5 
Member of group: something something 

示例文本,我想顯示:

user1 user2 user3 user4 user5 
+0

您不打印任何東西 –

回答

3

這個怎麼樣:

awk -F': ' '/Member users:/{print $2}' file 

-F:分割線成:<space>分隔的字段。這樣做,所有的用戶名可以從$2獲得。


更新:

在評論你提醒我說,你要刪除的,爲好。對不起,錯過了。根據上述命令,您可以使用gsub()$2的空格替換,

awk -F': ' '/Member users:/{gsub(","," ",$2); print $2}' file 
+1

這會刪除**成員用戶:**這很好,但刪除逗號又如何呢? – bluerojo

+1

哦,錯過了。給我一點時間。 – hek2mgl

+0

非常感謝! – bluerojo

1

你也可以將其降低到單個(GNU)sed命令:

$ sed -n '/^Member users: /{s///;s/,//gp}' infile 
user1 user2 user3 user4 user5 

這防止印刷帶-n,然後僅作用開始Member users線,然後刪除該術語(s///重複序列和刪除最後一場比賽)和所有逗號。

那(我認爲–未經測試)一個版本將與BSD工作的sed(末尾多餘的分號):

sed -n '/^Member users: /{s///';'s/,//gp;}' infile 
+0

在這種情況下''awk'使用'sed'有什麼好處嗎?雖然很好的答案。從我+1。 – bluerojo

+1

@EdMorton刪除了重複的正則表達式。 –

1

我可能會perl的吧:

perl -ne 's/.* users: // && print join " ", split /, /' 

試紙領先部分行,然後'分割'其餘行','

可以在那裏輕鬆添加排序

perl -ne 's/.* users: // && print join " ", sort split /, /'