Хороший шаблон включает в себя все, что вам нужно, чтобы соответствовать интересующим данным, но также достаточно информации, чтобы исключить неинтересные данные. Поскольку вам нужны только строки с lnx86
, сделайте эту часть вашего шаблона. Я написал это с помощью /x
, чтобы разложить шаблон, чтобы облегчить грок:
while( <DATA> ) {
next unless m|
/
( [A-Z]{3} \d{2} \.\d{2} \.\d{3} ) # $1
/
lnx86
(?: / | \Z ) # another slash or end of string
|x;
print;
}
__END__
BC_ROOT|/home/test/test_1/ABC/ABC-012/ABC04.16.103/lnx86
DEF_ROOT|/home/test/test_2/DEF/DEF192/DEF19.20.100/lnx86
GHI_ROOT|/home/test/test_3/GHI/GHI19.10.199/lnx86/tools.lnx86
JKL_ROOT|/home/test/test_4/JKL/JKL19.00.000/lnx86
ABC_ROOT|/home/test/test_1/ABC/ABC-012/ABC04.16.103/lnppc
DEF_ROOT|/home/test/test_2/DEF/DEF192/DEF19.20.100/lnppc
Это выбирает строки, которые вы хотите:
BC_ROOT|/home/test/test_1/ABC/ABC-012/ABC04.16.103/lnx86
DEF_ROOT|/home/test/test_2/DEF/DEF192/DEF19.20.100/lnx86
GHI_ROOT|/home/test/test_3/GHI/GHI19.10.199/lnx86/tools.lnx86
JKL_ROOT|/home/test/test_4/JKL/JKL19.00.000/lnx86
Вы можете немного обобщите, чтобы позже вы могли выбрать другой инструмент. Используйте quotemeta
, чтобы убедиться, что ничто в значении не является метасимволом регулярного выражения (если это не то, что вы хотите):
my $tool = quotemeta( 'lnx86' );
while( <DATA> ) {
next unless m|
/
( [A-Z]{3} \d{2} \.\d{2} \.\d{3} ) # $1
/
$tool
(?: / | \Z ) # another slash or end of string
|x;
print;
}