Regex 在Perl中,如何在grep之后的匹配大括号之间提取字符串?
我有一个以下提到的文本格式的文件: cat test.txtRegex 在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
"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规范非常接近。