Regex 在Perl中,如何在grep之后的匹配大括号之间提取字符串?

Regex 在Perl中,如何在grep之后的匹配大括号之间提取字符串?,regex,string,bash,perl,pattern-matching,Regex,String,Bash,Perl,Pattern Matching,我有一个以下提到的文本格式的文件: cat test.txt "perl-Test::DNS" : [ { "environment" : "test1", "hash" : "c8d149b4fc895b214276ca5c90d1181e", "identifier" : "test1-Test::DNS", }, { "environment

我有一个以下提到的文本格式的文件: cat test.txt

"perl-Test::DNS" : [
         {
            "environment" : "test1",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test1-Test::DNS",
         },
         {
            "environment" : "Test2",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test2-Test::DNS",
         },
         {
            "environment" : "Test3",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test3-Test::DNS",
         },
]

"perl-Test::SSH" : [
         {
            "environment" : "test1",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test1-Test::SSH",
         },
         {
            "environment" : "Test2",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test2-Test::SSH",
         },
         {
            "environment" : "Test3",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test3-Test::SSH",
         },
],
我需要从文件中grep特定字符串,即“perl Test::SSH:[”,并打印/提取该字符串的“[”和“]”之间的整行

我在这里发现了类似的问题:但这个链接只提取两个括号之间的单词,我需要提取行


任何有效的方法都会被接受,但解释会大有帮助。

你可以做括号捕获,但如果你不需要的话,它会很混乱。(
JSON
XML
稍微容易处理,但这仍然不是一个好主意)

然而,这看起来可能是
YAML
-这很接近-我只需要从源代码中删除一个尾随逗号,我假设这是因为您给了我们一个配置示例

加载YAML看起来有点像这样:

#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;

use YAML::XS; 

my $yaml = Load ( do { local $/; <DATA> } );
print Dumper $yaml -> {"perl-Test::DNS"};


__DATA__
"perl-Test::DNS" : [
         {
            "environment" : "test1",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test1-Test::DNS",
         },
         {
            "environment" : "Test2",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test2-Test::DNS",
         },
         {
            "environment" : "Test3",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test3-Test::DNS",
         },
]

"perl-Test::SSH" : [
         {
            "environment" : "test1",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test1-Test::SSH",
         },
         {
            "environment" : "Test2",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test2-Test::SSH",
         },
         {
            "environment" : "Test3",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test3-Test::SSH",
         },
]

但这是一种“正常”的perl数据结构,您可以随意遍历。

您可以进行括号捕获,但在不需要的情况下,它会很混乱。(
JSON
XML
稍微容易处理,但这仍然不是一个好主意)

然而,这看起来可能是
YAML
-这很接近-我只需要从源代码中删除一个尾随逗号,我假设这是因为您给了我们一个配置示例

加载YAML看起来有点像这样:

#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;

use YAML::XS; 

my $yaml = Load ( do { local $/; <DATA> } );
print Dumper $yaml -> {"perl-Test::DNS"};


__DATA__
"perl-Test::DNS" : [
         {
            "environment" : "test1",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test1-Test::DNS",
         },
         {
            "environment" : "Test2",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test2-Test::DNS",
         },
         {
            "environment" : "Test3",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test3-Test::DNS",
         },
]

"perl-Test::SSH" : [
         {
            "environment" : "test1",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test1-Test::SSH",
         },
         {
            "environment" : "Test2",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test2-Test::SSH",
         },
         {
            "environment" : "Test3",
            "hash" : "c8d149b4fc895b214276ca5c90d1181e",
            "identifier" : "test3-Test::SSH",
         },
]

但是,这是一个“正常”的perl数据结构,您可以随意遍历。

它类似于json格式。但是,请查找json解析器,但它不是非常有效的json。有没有可能是一个换位错误,并且缺少开/闭括号和逗号?它类似于json格式。但是,请查找json解析器,但它不是非常有效的json。有没有可能是这样的这是一个换位错误,并且缺少了开/闭括号和逗号?它不是YAML或XML文件,而是一个“.conf”文件格式-文件扩展名是不相关的。重要的是其中的内容。您必须非常幸运地发现,正如您的文件一样,它与YAML规范非常匹配。它不是YAML或XML文件,它是一个“.conf”文件格式–文件扩展名是不相关的。文件中包含的内容才是重要的。您必须非常幸运地发现,正如您的文件一样,它与YAML规范非常接近。