我有一个文件,其中有一行:
/hosting/logs/U01-ecom-SIT01/CU01-DC05-IFIO_SIT01_NU01-nc3sz1ecmas11/waslogs/SystemOut_10.01.21_16.54.18.log`
我需要一个脚本来读取这一行并从中删除时间戳,即:
10.01.21_16.54.18
脚本应该打印没有时间戳的文件名并保持完整路径,即:
/hosting/logs/U01-ecom-SIT01/CU01-DC05-IFIO_SIT01_NU01-nc3sz1ecmas11/waslogs/SystemOut.log`
请帮忙,因为我无法模式匹配并输出没有时间戳的文件路径。
答案 0 :(得分:1)
echo "/hosting/logs/U01-ecom-SIT01/CU01-DC05-IFIO_SIT01_NU01-nc3sz1ecmas11/waslogs/SystemOut_10.01.21_16.54.18.log" |
perl -pe "s/_\d\d\.\d\d\.\d\d_\d\d\.\d\d\.\d\d//;"
答案 1 :(得分:1)
$ perl -e 's{_\d{2}\.\d{2}.\d{2}_\d{2}\.\d{2}.\d{2}}{} and print for @ARGV' /hosting/logs/U01-ecom-SIT01/CU01-DC05-IFIO_SIT01_NU01-nc3sz1ecmas11/waslogs/SystemOut_10.01.21_16.54.18.log
答案 2 :(得分:1)
路径缩短以防止滚动:
$ cat paths CU01-DC05-IFIO_SIT01_NU01-nc3sz1ecmas11/waslogs/SystemOut_10.01.21_16.54.18.log $ perl -pe 's/(_(\d\d(\.\d\d){2})){2}\.log$/.log/' paths CU01-DC05-IFIO_SIT01_NU01-nc3sz1ecmas11/waslogs/SystemOut.log
时间戳由2个看起来像_##.##.##
的序列组成。子序列以.##
的2个序列结束。这些是{2}
量词的作用。
答案 3 :(得分:0)
while(<>){
@s = split /\// ;
$fullpath=join("/",splice @s , 0, $#s);
@a = split /[_.]/ ,$s[-1];
$newfile="$fullpath/$a[0].$a[-1]";
print $newfile."\n";
}
答案 4 :(得分:0)
您可以使用以下编码
use strict;
use warnings;
my $var; $var=/hosting/logs/U01-ecom-SIT01/CU01-DC05-IFIO_SIT01_NU01-nc3sz1ecmas11/waslogs/SystemOut_10.01.21_16.54.18.log";
$var=~s/_\d\d\.\d\d\.\d\d//g;
# $var=~s/_10\.01\.21_16\.54\.18//g; # You can use this way also
print "$var\n";