我是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