解析相关字段的文件

时间:2017-04-05 19:26:22

标签: regex bash perl pattern-matching match

如何在包含以下内容的文件上使用正则表达式:

A7247, partOf:["LTA_SO", "dontact"]
alat, partOf:["WTP_ZR"]
yello, partOf:[] 

然后回来(注意不是任何事情的一部分):

A7247:LTA_SO,dontact
alat:WTP_ZR
yello:

谢谢!

2 个答案:

答案 0 :(得分:0)

右侧(:之后的部分)看起来像JSON。如果这是真的,那么最好将其视为:

use strict;
use warnings;
use JSON::XS;

while (<DATA>) {
    chomp;
    my ($lhs, $rhs) = split(/:/, $_, 2);
    my $array_ref = decode_json($rhs);

    $lhs = (split(/,/, $lhs))[0];
    $rhs = join(',', @$array_ref);

    print join(':', $lhs, $rhs), "\n";
}

__DATA__
A7247, partOf:["LTA_SO", "dontact"]
alat, partOf:["WTP_ZR"]
yello, partOf:[]

输出:

A7247:LTA_SO,dontact
alat:WTP_ZR
yello:

答案 1 :(得分:-1)

FPAT中使用gnu awk,您可以使用提供的正则表达式分割字段:

awk -v FPAT='"[^"]*"|[^, :"]+,' '{
   s=d=""
   for (i=1; i<=NF; i++) {
      gsub(/^"|[",]$/, "", $i)
      s = s d $i
      d = (d == "" ? ":" : ",")
   }
   print s (i==2?d:"")
}' file

<强>输出:

A7247:LTA_SO,dontact
alat:WTP_ZR
yello: