2013-09-25 2 views
-3

Мне нужно придумать регулярное выражение, чтобы дать мне все номера KB из списка ниже. Я думаю, мне нужно разделить до первого [затем разбить по запятым, а затем удалить [xx]: из каждого раскола.Regex, чтобы удалить все до и после этого разделить

Может кто-то указать мне в правильном направлении. Я работаю в perl btw.

«Установлено 195 исправлений (исправлений). [01]: 982861, [02]: KB2592687, [03]: KB2425227, [04]: KB2484033, [05]: KB2488113, [06]: KB2492386, [ 07]: KB2503665, [08]: KB2505438, [09]: KB2506014, [10]: KB2506212, [11]: KB2506928, [12]: KB2507618, [13]: KB2509553, [14]: KB2510531, [15] : KB2511250, [16]: KB2511455, [17]: KB2515325, [18]: KB2518869, [19]: KB2522422, [20]: KB2529073, [21]: KB2533552, [22]: KB2536275, [23]: KB2536276 , [24]: KB2539635, [25]: KB2541014, [26]: KB2544893, [27]: KB2545698, [28]: KB2547666, [29]: KB2552343, [30]: KB2556532, [31]: KB2560656, [ 32]: KB2563227, [33]: KB2564958, [34]: KB2567680, [35]: KB2570947, [36]: KB2572077, [37]: KB2574819, [38]: KB2584146, [39]: KB2585542, [40] : KB2588516, [41]: KB2603229, [42]: KB2604115, [43]: KB2607047, [44]: KB2607576, [45]: KB2608658, [46]: KB2618444, [47]: KB2618451, [48]: KB2620704 , [49]: KB2620712, [50]: KB2621146, [51]: KB2621440, [52]: KB2631813, [53]: KB2633873, [54]: K B2633952, [55]: KB2636573, [56]: KB2639308, [57]: KB2639417, [58]: KB2640148, [59]: KB2641653, [60]: KB2641690, [61]: KB2643719, [62]: KB2644615, [63]: KB2645640, [64]: KB2647516, [65]: KB2647518, [66]: KB2647753, [67]: KB2653956, [68]: KB2654428, [69]: KB2655992, [70]: KB2656356, [71 ]: KB2656373, [72]: KB2656411, [73]: KB2658846, [74]: KB2659262, [75]: KB2660075, [76]: KB2660465, [77]: KB2661254, [78]: KB2665364, [79]: KB2667402, [80]: KB2675157, [81]: KB2676562, [82]: KB2677070, [83]: KB2679255, [84]: KB2685811, [85]: KB2685813, [86]: KB2685939, [87]: KB2686831, [88]: KB2688338, [89]: KB2690533, [90]: KB2691442, [91]: KB2695962, [92]: KB2698365, [93]: KB2699779, [94]: KB2699988, [95]: KB2705219, [96 ]: KB2709162, [97]: KB2709630, [98]: KB2709715, [99]: KB2709981, [100]: KB2712808, [101]: KB2718523, [102]: KB2718704, [103]: KB2719177, [104]: KB2719857, [105]: KB2719985, [106]: KB2722913, [107]: KB2724197, [108]: KB2726535, [109]: KB2729094, [110]: KB2729452, [111]: KB2731771, [112]: KB2731847, [113]: KB2732059, [114]: KB2735855, [115]: KB2736233 , [116]: KB2736422, [117]: KB2739159, [118]: KB2741355, [119]: KB2742599, [120]: KB2743555, [121]: KB2744842, [122]: KB2749655, [123]: KB2750841, [ 124]: KB2753842, [125]: KB2756822, [126]: KB2756921, [127]: KB2757638, [128]: KB2758857, [129]: KB2761217, [130]: KB2761226, [131]: KB2761451, [132] : KB2761465, [133]: KB2762895, [134]: KB2763523, [135]: KB2765809, [136]: KB2769369, [137]: KB2770660, [138]: KB2772930, [139]: KB2778344, [140]: KB2778930 , [141]: KB2779030, [142]: KB2779562, [143]: KB2785220, [144]: KB2786081, [145]: KB2786400, [146]: KB2789645, [147]: KB2790113, [148]: KB2790655, [ 149]: KB2791765, [150]: KB2792100, [151]: KB2797052, [152]: KB2798162, [153]: KB2799494, [154]: KB2804579, [155]: KB2806748, [156]: KB2807986, [157] : KB2808679, [158]: KB2808735, [159]: KB2809289, [160]: KB2813170, [161]: KB2813347, [162]: KB2813430, [163]: KB2817183, [164]: KB2820197, [165]: KB2820331 , [166]: KB2823324, [167]: KB2830290, [168]: KB2832414, [169]: KB2833946, [170]: KB2834140, [171]: KB2834886, [172]: KB2835361, [173]: KB2836942, [ 174]: KB2836 943, [175]: KB2839894, [176]: KB2840149, [177]: KB2840631, [178]: KB2844286, [179]: KB2849470, [180]: KB2850851, [181]: KB2853587, [182]: KB2853952, [183]: KB2859537, [184]: KB2861855, [185]: KB2862772, [186]: KB2862966, [187]: KB2863058, [188]: KB2868116, [189]: KB2868623, [190]: KB2870699, [191] ]: KB2872339, [192]: KB2876315, [193]: KB976902, [194]: KB982018"

ответ

2

В случае, если вам не нужен раствор один-лайнер, здесь:

#!/usr/bin/perl 
use warnings; 
use strict; 

my $t="194 Hotfix(s) Installed.,[01]: 982861,[02]: KB259245 ...."; 
my @numbers=$t=~/KB(\d+)/g; 
print join("\n",@numbers); 

Обратите внимание, что первое число [01] не будет сопоставляться с этим регулярным выражением, так как префикс KB отсутствует, по-моему, это была опечатка в вашем сообщении. В противном случае измените соответствующее регулярное выражение на:

my @numbers=$t=~/(\d+)(?:\,|\z)/g; 
+0

К сожалению, это не опечатка, я рад, что вы это заметили. его вывод из файла systeminfo.exe на окнах. эта конкретная машина возвращает этот повтор. –

1
perl -nE 'say join " ", /KB(\d+)/g"' file 
Смежные вопросы