У меня есть каталог файлов в файловой системе:Извлечь часть файла с Regex в Perl
111111.222.log
222222.33.log
444444.0.log
Если у меня есть доступ к переменной $id
, где $id
является первой частью чисел до первого .
, как мне получить вторую часть номера?
$id
- известное значение, вторая часть числа - это то, что я хочу извлечь из имени файла, если он существует.
Есть ли эффективный подход, чтобы сделать это без сохранения всего каталога файлов в массив, а затем пройти через каждый элемент с помощью split
?
То, что я имею в виду что-то вроде:
if (-e '$id.(\d+).log') {
$unknown = $1;
}
выше не является допустимым кодом, просто идея.
В обратном направлении, если у меня есть доступ к полной строке, регулярное выражение я использую для экстракции (где 22
является $unknown
):
"158855.22.log" =~ /^(\d+)\.(\d+)\.log$/;
print "ID is $1\n";
print "Unknown is $2\n";
Да, это работает. Я тестирую его со сценарием в том же каталоге, что и файлы .log. Однако, если я укажу поиск '$ path ="/path/";' и поместил его перед '$ id', он перестанет работать. Есть ли другой способ назначения пути поиска? – KDX
@KDX, Каков абсолютный путь к каталогу с файлами, которые вы тестируете? – 7stud
Это '/ home/kdx/data/log /' где у меня есть файлы. Если я поместил скрипт внутри каталога вместе с файлами, он будет работать. Если я помещаю скрипт вне каталога, даже с указанным путем, он не работает. Кажется, что glob выполняет свою работу только в текущем рабочем каталоге. – KDX