簡體   English   中英

用單個awk命令替換grep和sed

[英]Replacing grep and sed with single awk command

因此,我已經嘗試將這一行代碼轉換為單個awk命令,但到目前為止仍未成功(不顯示任何內容)。 我不是awk經驗最豐富的人,因此我仍在努力使用它。 如果有人可以給我一些指導並指出我做錯了什么,將不勝感激。 此單行命令將拉出所有用戶的列表,並刪除周圍所有不必要的信息,僅顯示名稱列表。

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

那這個呢:

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

-F:將行拆分為以:<space>分隔的字段。 這樣,可以從$2獲得所有用戶名。


更新:

在評論你提醒我說,你要刪除的,也是如此。 抱歉,錯過了。 基於上面的命令,你可以使用gsub()來代替,在通過空間$2

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

您還可以將其簡化為單個(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

我可能會喜歡:

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

剝離行的開頭部分,然后將行的其余部分“拆分”為','

可以很容易地在其中添加排序

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM