[英]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能夠輕松搜索和刪除多余的文本,並且對於我要完成的工作將是一個可靠的用例。 我只是無法完成我正在嘗試的事情。 帶給我幾個問題...是同時替換grep
和sed
還是awk
的理想情況,還是在這種情況下應使用grep
和sed
? 我在用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.