如何用sed/awk/grep从应用组用户列表提取特定组用户
提取指定组用户的几种方法
使用 sed
利用地址范围匹配目标组及其后续用户行,过滤并格式化输出:
sed -n '/^ - Medicine Dep:/,/^ - /{/^ - /s/^ - //p}' user_groups.txt
解释:
-n只输出匹配的行/^ - Medicine Dep:/,/^ - /定位从目标组行到下一个组开头的范围/^ - /s/^ - //p在范围内匹配用户行,去掉前缀后打印
使用 awk
通过标记变量控制输出逻辑,精准提取目标组下的用户:
awk '/^ - Medicine Dep:/{flag=1;next}/^ - /{flag=0}flag&&/^ - /{sub(/^ - /,"");print}' user_groups.txt
解释:
- 匹配到目标组时,开启标记
flag并跳过当前行 - 匹配到其他组时,关闭标记
flag - 标记开启且是用户行时,移除前缀后打印
使用 grep + sed
组合工具实现分段过滤:
grep -A 100 "Medicine Dep:" user_groups.txt | grep -v "Medicine Dep:" | grep -B 100 "^ - " | grep "^ - " | sed 's/^ - //'
解释:
-A 100获取目标组后的100行(可根据实际用户数量调整行数)- 依次过滤掉目标组行、下一个组及之后的行,最后提取并格式化用户行
提取出用户列表后,即可通过管道传入xargs执行通知命令:
# 以awk方法为例 awk '/^ - Medicine Dep:/{flag=1;next}/^ - /{flag=0}flag&&/^ - /{sub(/^ - /,"");print}' user_groups.txt | xargs -l -i myapp notification:generate {} "System maintenance today starting at 4 PM"
内容的提问来源于stack exchange,提问作者Oleksa
相关产品推荐
相关产品推荐

