我是awk
和perl
的新手,请耐心等待。 我有以下awk
脚本:Perl单线程模拟awk脚本
awk '/regex1/{p = 0;} /regex2/{p = 1;} p'
什么这通常做的就是打印从regex2线匹配盯着所有行直到regex1的线路匹配被发现。
实施例:
regex1
regex2
line 1
line 2
regex1
regex2
regex1
输出:
regex2
line 1
line 2
regex2
是否有可能使用perl
单行来模拟此?我知道我可以用一个保存在文件中的脚本来做到这一点。
编辑:
一个实际的例子:
2017 17年5月24日:00:06827 [INFO] 123456(布拉赫:Blah1)服务名称::单线内容
24 2017年5月17日17:00:06,828 [信息] 567890(Blah:Blah1)服务名称::内容(可能包含多行)
2017年五月24日17:00:06,829 [INFO] 123456(Blah:Blah2) 服务名称:多行内容。印刷对象物[ID1 = FAC-adasd ID2 = 123231
ID3 = 123108个状态=未知
代码= 530007站Dest = CA
]2017 17年5月24日:00:06830 [INFO] 123456(布拉赫: Blah1)服务名称::单线内容
24 2017 5月17日:00:06831 [INFO] 567890(布拉赫:Blah2)服务名称::含量(可跨越多行)
鉴于搜索键123456我想提取以下内容:
2017 17年5月24日:00:06827 [INFO] 123456(布拉赫:Blah1)服务名称::单线内容
2017 17年5月24日:00:06829 [INFO] 123456(布拉赫: Blah2) 服务名称:多行内容。印刷对象物[ID1 = FAC-adasd ID2 = 123231
ID3 = 123108个状态=未知
代码= 530007站Dest = CA
]2017 17年5月24日:00:06830 [INFO] 123456(布拉赫: Blah1)服务名称::单线内容
以下awk脚本做这项工作:
awk '/[0-9]{2}\s\w+\s[0-9]{4}/{n = 0} /123456/ {n =1}n' file
你知道有一个你可以尝试的程序awk2perl吗? – JFS31
为awk,请参阅https://stackoverflow.com/a/38972737/4082052更好的方法......如果您知道如何编写perl脚本,请参阅https://stackoverflow.com/documentation/perl/3696/perl- one-liners#t = 201706141257567028325和http://perldoc.perl.org/perlrun.html#Command-Switches ..你会想要使用http://perldoc.perl.org/perlop.html#Range-Operators – Sundeep