【发布时间】:2014-09-04 04:08:44
【问题描述】:
我正在寻找脚本中的文件路径。所以我要写一个脚本 cat out 文件,然后查找“/”。
我宁愿使用 perl 正则表达式,并且只想 grep 出文件路径。
foo@foohost:~ $ cat /sbcimp/dyn/data/FOO/GSD/scripts/FOOonoff.pl | grep "/"
#!/usr/bin/perl
my $output_file = "/sbcimp/dyn/data/stmFOO3/dailymetrics/PartRates/file6.csv";
my $input_file_name_ESTATE = "/sbcimp/dyn/sym/data/stmFOO3/part_rates/FOO_estate.$year$month1$day1.1630.csv";
my $input_file_name_ESTATE = "/sbcimp/data/stmFOO3/part_rates/FOO_estate.20140829.1630.csv";
my $input_file_name_ESTATE2 = "/sbcimp/part_rates/FOO_estate.$year$month1$day2.1630.csv";
my $input_file_name_ESTATE3 = "/sbcimp/FOO_estate.$year$month2$day3.1630.csv";
my $input_file_name_NEW = "/sbcimp/dyn/data/stmFOO3/dailymetrics/RiskTiers/new_terms.csv";
$argVal =~ s/\s+$//;
$argVal =~ s/^\s+//;
$argVal =~ s/\"$//;
$argVal =~ s/^\"//;
$argVal =~ s/\'$//;
$argVal =~ s/^\'//;
如果我整理出文件并将其放入 perl one 衬里,我只会得到根目录。
foo@foohost:~ $ cat /sbcimp/dyn/data/FOO/GSD/scripts/FOOonoff.pl | perl -nle 'print /(\/\w+\/)/' | sort -u
/sbcimp/
我了解正则表达式中的量词,但如果我使用 'print /(/\w+/){1,9}/' 那不会给我 "/w+/.. 1 或 9 次。我要去寻找距离根路径 1 次或多次的路径。 如何量化整个捕获的正则表达式,而不仅仅是最后一个字符?
【问题讨论】:
-
应该改为
/^\/(\w+\/)+/。捕获第一个 for-slash,然后是任意数量的\w+/序列。 -
不过,最简单的方法是删除字符串末尾的所有非斜线符号(例如,
s~[^/]+$~~)。 -
所以这不是真正可以量化的吗?