如何从 perl 脚本中的日志文件中读取特定字符串
how to read a particular string from the log file inside a perl script
示例日志,
2016-03-29 10:57:28 UTC 642 [31871] INFO node information:
{"datacenter": "TEST-DC", "infraType": "saas", "service": "fusion",
"extraInfo": {"systemType": "secondary-ha1", "tenantType": "sales",
"tenantName": "sale1"}
我想读 "tenantName": "sale1" 我需要的最后一个字符串是 "sale1"
尝试使用 awk 并切入 Perl 脚本但没有解决任何建议 and/or 提示将是可观的
我从@Sobrique 得到了答案
使用了模块 JSON & List::MoreUtils
find( \&Count, $logDir);
my @uniqtotal = uniq @totCount;
$totalcount = @uniqtotal;
sub Count {
if( $File::Find::name =~m!$logDir/(.*?)/$pattern! and -f $File::Find::name ) {
my $jsonLine = `grep 'tenantName' $File::Find::name`;
if ($jsonLine ne "") {
$jsonLine =~ m/(\{.*\})/ ;
my $json_text = ;
my $json = decode_json ( $json_text );
push @totCount, $json -> {extraInfo} -> {tenantName};
}
}
}
grep -oP 'tenantName": "\K[^"]+' inputfile
sale1
或sed
:
sed -r 's/.*"tenantName": "([^"]+).*//g' inputfile
sale1
说明:
grep
: -o
标志将只打印字符串的匹配部分而不是整行。
-P
标志将为 grep
启用 perl
正则表达式。
\K
:表示忘记它左边的一切。
无论如何不要在 perl 脚本中使用 awk 和 sed。
这是 JSON,因此最好解析为 JSON。
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
while ( <> ) {
my ( $json_text ) = m/(\{.*\})/;
my $json = decode_json ( $json_text );
print $json -> {extraInfo} -> {tenantName};
}
或者简化为一个衬垫,因为那是一件很酷的事情:
perl -MJSON -ne 'print decode_json (/(\{.*\})/ && )->{extraInfo}{tenantName}'
示例日志,
2016-03-29 10:57:28 UTC 642 [31871] INFO node information: {"datacenter": "TEST-DC", "infraType": "saas", "service": "fusion", "extraInfo": {"systemType": "secondary-ha1", "tenantType": "sales", "tenantName": "sale1"}
我想读 "tenantName": "sale1" 我需要的最后一个字符串是 "sale1"
尝试使用 awk 并切入 Perl 脚本但没有解决任何建议 and/or 提示将是可观的
我从@Sobrique 得到了答案
使用了模块 JSON & List::MoreUtils
find( \&Count, $logDir);
my @uniqtotal = uniq @totCount;
$totalcount = @uniqtotal;
sub Count {
if( $File::Find::name =~m!$logDir/(.*?)/$pattern! and -f $File::Find::name ) {
my $jsonLine = `grep 'tenantName' $File::Find::name`;
if ($jsonLine ne "") {
$jsonLine =~ m/(\{.*\})/ ;
my $json_text = ;
my $json = decode_json ( $json_text );
push @totCount, $json -> {extraInfo} -> {tenantName};
}
}
}
grep -oP 'tenantName": "\K[^"]+' inputfile
sale1
或sed
:
sed -r 's/.*"tenantName": "([^"]+).*//g' inputfile
sale1
说明:
grep
: -o
标志将只打印字符串的匹配部分而不是整行。
-P
标志将为 grep
启用 perl
正则表达式。
\K
:表示忘记它左边的一切。
无论如何不要在 perl 脚本中使用 awk 和 sed。
这是 JSON,因此最好解析为 JSON。
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
while ( <> ) {
my ( $json_text ) = m/(\{.*\})/;
my $json = decode_json ( $json_text );
print $json -> {extraInfo} -> {tenantName};
}
或者简化为一个衬垫,因为那是一件很酷的事情:
perl -MJSON -ne 'print decode_json (/(\{.*\})/ && )->{extraInfo}{tenantName}'