对于以下提供的示例数据和程序,请帮我找到正确的正则表达式。
#cat df.dat
/root
/dev/data1
/dev/data1/data3
/usr/local/oravg/oradat
用什么模式来提取root,data1,data3和oradat而不用" /"
$ perl grepperl.pl -pattern =' ' df.dat
$ cat grepperl.pl
#! /usr/bin/perl -s -wnl
BEGIN {
# -pattern='RE' switch is required
$pattern or
warn "Usage: $0 -pattern='RE' [ file1 ... ]\n" and
exit 255;
}
/$pattern/ and print;
答案 0 :(得分:5)
的Perl:
use File::Basename qw( basename );
my $fn = basename($qfn);
击:
fn="$( basename "$qfn" )"
bash(管道):
... | xargs -n 1 basename | ...
答案 1 :(得分:1)
答案 2 :(得分:0)
这是一种简单的bash方式(虽然bash未在问题中标记)
$ cat test
/root
/dev/data1
/dev/data1/data3
/usr/local/oravg/oradat
$ while read line; do echo ${line##*/}; done < test
root
data1
data3
oradat
有关详细信息,请参阅Bash Substring Removal。
答案 3 :(得分:0)
猜猜这会更加自我解释:
COALECE()
结果:
use File::Basename;
my @paths = qw (/root
/dev/data1
/dev/data1/data3
/usr/local/oravg/oradat);
for my $path (@paths) {
my $dirname = dirname ($path);
my $filename = basename ($path);
print "$path:\n\tFile: $filename\n\tDirectory: $dirname\n\n";
}
1;
答案 4 :(得分:0)