我正在尝试以下列模式获取组下的用户列表

时间:2014-04-03 17:52:50

标签: linux perl unix ksh

例如,AAA000和BBB111是CARDS组下的用户....我试图以下列格式获得输出。

AAA000 AAA000@pattern.com \
BBB111 BBB111@pattern.com \

我试过grep -i CARDS:/ etc / group | sed' s / $ /,/' | sed' s /,/ @ capitalone.com \ n / g' 这给了我

cards:x:36082:CARDS@pattern.com
AAA000@pattern.com
BBB111@pattern.com

知道我还应该在命令中包含哪些内容以获得我需要的格式......?

谢谢, 萨姆。

3 个答案:

答案 0 :(得分:1)

假设你的输入是这样的:

$ cat file
cards:x:36082:CARDS,AAA000,BBB111

你可以这样做:

$ perl -F, -lane 'if(/cards:/){print "$_ $_\@pattern.com" for (@F[1..$#F])}' file
AAA000 AAA000@pattern.com
BBB111 BBB111@pattern.com
  • 我们使用,作为字段分隔符(由-F,定义)。
  • 使用-a选项将,上的整行拆分为@F定义的数组。
  • 我们通过执行if(/cards:/)来测试当前行是否是您要解析的行。
  • 如果是,我们打印从第二个索引(@F[1..$#F])开始直到最后一个数组的每个元素。这是因为我们的第一个索引具有您不需要的值cards:x:36082:CARDS

答案 1 :(得分:0)

您可以在awk中执行此操作:

awk -F, '/cards:/{for(i=2;i<=NF;i++){printf"%s %s@pattern.com\n", $i, $i}}' file

输入:

cat file
cards:x:36082:CARDS,AAA000,BBB111

输出:

AAA000 AAA000@pattern.com
BBB111 BBB111@pattern.com

答案 2 :(得分:-1)

使用grep和awk找到命令...........

grep -i CARDS: /etc/group|awk -F, '/cards:/{for(i=2;i<=NF;i++) print $i,$i"@pattern.com \\"}'

感谢帮助人员。