我正在为此寻求快速解决方案,因为我并不真正擅长于perl / regex。
我有一个字符串如下;
abc_def0_ghi4_jkl_mno_pqr_123456.log some_extra_messages和随机垃圾
,我想要一个小的perl脚本(不是单行命令),该脚本将搜索.log文件名,并删除文件末尾的数字。这样输出看起来就像
abc_def0_ghi4_jkl_mno_pqr
有什么建议吗?
答案 0 :(得分:1)
基于您提供的一些信息的快速答案(可能是肮脏的)
use strict;
use warnings;
my $str = "abc_def0_ghi4_jkl_mno_pqr_123456.log some_extra_messages and random garbage";
my ($name) = ( $str =~ /^(\w+)_\d+\.log/);
print $name, "\n";
这假定名称位于脚本的开头,并且仅包含单词字符(字母,数字,下划线)。它将捕获所有内容,直到达到下划线开头的数字序列,后跟«.log»»。
答案 1 :(得分:0)
看起来 就像您要输出的所有内容,直到(但不包括)日志文件名之前的下划线。那是对的吗?您需要非常具体地说明数据的结构;否则,我们不得不猜测。
这是一个简短的脚本,可以接收示例输入并生成示例输出:
use strict;
use warnings;
my $str = 'abc_def0_ghi4_jkl_mno_pqr_123456.log some_extra_messages and random garbage';
s/_[^_]+\.log.*// for $str;
print $str, "\n";
s/_[^_]+\.log.*//
替换匹配:
.log
将匹配的文本替换为空字符串(已删除),并打印其余文本。