2014-12-08 3 views
2

Я закодировал perl regex, чтобы извлечь слова после определенного якоря, кажется, что он не работает. Что я делаю не так.perl regex - привязки и соответствие шаблону

Это мой фактический выход, мне нужно, чтобы извлечь каждый номер после группы ключевых слов

$id cuser301 uid=2301(cuser301) gid=32(rpc) groups=32(rpc),1001(cgrp1),1002(cgrp2),1003(cgrp3),1004(cgrp4),1005(cgrp5),1006(cgrp6),1007(cgrp7),1008(cgrp8),1009(cgrp9),1010(cgrp10),1011(cgrp11),1012(cgrp12),1013(cgrp13),1014(cgrp14),1015(cgrp15),1016(cgrp16),1017(cgrp17),1018(cgrp18),1019(cgrp19),1020(cgrp20),1021(cgrp21),1022(cgrp22),1023(cgrp23),1024(cgrp24),1025(cgrp25),1026(cgrp26),1027(cgrp27),1028(cgrp28),1029(cgrp29),1030(cgrp30),1031(cgrp31),1032(cgrp32) 

Исходя из вышеизложенного, я запускаю команду ID, а затем хотел бы, чтобы захватить номера после групп, пожалуйста, помогите.

Я использую следующее.

my $check_groups = execute("\id $user"); #---> (execute is to run commands on the linux client, please ignore it) 

my $new_groups = ('/^groups/',$check_groups); # ---> Now $new_groups should have all numbers after groups. 
+0

Просьба представить пример вывода –

+0

Ожидаемый результат выборки должен быть: 32,1001,1002,1003 ... так далее – Rohit

+0

Это удивительно - https://regex101.com/r/uZ9tO6/1 Большое спасибо – Rohit

ответ

0
my $input = '$id cuser301 uid=2301(cuser301) gid=32(rpc) groups=32(rpc),1001(cgrp1),1002(cgrp2),1003(cgrp3),1004(cgrp4),1005(cgrp5),1006(cgrp6),1007(cgrp7),1008(cgrp8),1009(cgrp9),1010(cgrp10),1011(cgrp11),1012(cgrp12),1013(cgrp13),1014(cgrp14),1015(cgrp15),1016(cgrp16),1017(cgrp17),1018(cgrp18),1019(cgrp19),1020(cgrp20),1021(cgrp21),1022(cgrp22),1023(cgrp23),1024(cgrp24),1025(cgrp25),1026(cgrp26),1027(cgrp27),1028(cgrp28),1029(cgrp29),1030(cgrp30),1031(cgrp31),1032(cgrp32)'; 
print join ',', $input =~ /(?:.*groups=|\G.*?)\b([0-9]+)/g; 

Это общая закономерность; в более сложных случаях, когда вы хотите, чтобы ветвь \G применялась только после первого сопоставления без нулевой длины, вы можете использовать \G(?!\A) вместо \G.

+0

Замечательное наблюдение. Спасибо, ysth – Rohit

0

Попробуйте сделать это:

$ echo <INPUT> | perl -ne 'print "$1," while /,(\d+)\(/g' 

Проверить https://regex101.com/r/uZ9tO6/1

+0

оставляет вне 32, листья на конце ',' – ysth

Смежные вопросы