这是我的问题:
我有一个perl脚本,可以为我搜索一些Linux文件。 文件名是这样的:
shswitch_751471_126.108.216.254_13121
问题在于
13121
是一个随机增加的id。 我正在尝试,因为今天早上要搜索正确的正则表达式,但我找不到它!拜托,你能帮忙吗?
这就是我所拥有的:
#!/usr/bin/perl
$dir = "/opt/exploit/dev/florian/scan-allied/working-dir/";
$adresse ="751471" ;
$ip = "126.108.216.254";
$tab=`find $dir -type f -name \"$dir_$adresse_$ip_*\"`;
print $tab;
我甚至试过
$tab=`find $dir -type f -name \"$dir_$adresse_$ip_[0-9]{1}\"`;
但是perl不会听我的话:(
答案 0 :(得分:2)
问题是您已将$dir
包含在传递给find
的文件名中。
您可能想说:
$tab=`find $dir -type f -name \"shswitch_${adresse}_${ip}_*\"`;
答案 1 :(得分:2)
更改此行:
$tab=`find $dir -type f -name \"$dir_$adresse_$ip_*\"`;
与
$tab=`find $dir -type f -name \"${dir}_${adresse}_${ip}_*\"`;
答案 2 :(得分:1)
唔。如果您使用perl,那么您根本不需要致电find(1)
!如果您使用File::Find模块,则可以在没有外部呼叫的情况下获得更好的find
。尝试这样的事情:
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my $dir = "/opt/exploit/dev/florian/scan-allied/working-dir/";
my $addresse ="751471" ;
my $ip = "126.108.216.254";
my $re = "shswitch_${addresse}_${ip}_\d+";
sub wanted {
/^$re$/ and -f $_ and print "$_\n";
}
find \&wanted, $dir;
这将打印所有匹配的文件。
您可以使用find2perl
实用程序将完整的find
命令行转换为wanted
函数!
对于
find2perl /opt/exploit/dev/florian/scan-allied/working-dir -type f -name \"shswitch_751471_126.108.216.254_${ip}_*\"
提供以下代码:
#! /usr/bin/perl -w
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if 0; #$running_under_some_shell
use strict;
use File::Find ();
# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.
# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
sub wanted;
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '/opt/exploit/dev/florian/scan-allied/working-dir');
exit;
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f _ &&
/^"shswitch_751471_126\.108\.216\.254__.*"\z/s
&& print("$name\n");
}