如何在perl中组合正则表达式和print的输出?

时间:2014-07-04 01:03:56

标签: perl

您好我的搜索结果为,

"abc"

来自

perl -lne 'print for /"name":"(.+?)"/g' file > newfile

"def"

perl -lne 'print for /"title":"(.+?)"/g' file > newfile

我试图将O / P作为

abc:"def",

通过组合两个衬垫。我尝试过:

perl -lne 'print for /"name":"(.+?)","title":"(.+?)"/g' *.json > newfile11

但它没有工作

1 个答案:

答案 0 :(得分:1)

我想我是基于你的其他问题的输入而想出来的。

我假设您将此作为输入:

{"card":{"cardName":"10AN10G","portSignalRates":["10AN10G-1-OTU2","10AN10G-1-OTU2E","10AN10G-1-TENGIGE","10AN10G-1-STM64"],"listOfPort":{"10AN10G-1-OTU2":{"portAid":"10AN10G-1-OTU2","signalType":"OTU2","tabNames":["PortDetails"],"requestType":{"PortDetails":"PTP"},"paramDetailsMap":{"PortDetails":[{"type":"dijit.form.TextBox","name":"signalType","title":"Signal Rate","id":"","options":[],"label":"","value":"OTU2","checked":"","enabled":"false","selected":""},{"type":"dijit.form.TextBox","name":"userLabel","title":"Description","id":"","options":[],"label":"","value":"","checked":"","enabled":"true","selected":""},{"type":"dijit.form.Select","name":"Frequency","title":"Transmit Frequency",}}}}}}

或至少包含这些类型的行的大型文本文件。您想要从每一行解析出名称和标题。你可以用这一行来做到这一点。

Matt@MattPC ~/perl/testing/12
$ perl -ne 'if ( /"name":"([^"]+)","title":"([^"]+?)"/ ) { print $1 . ":\"" . $2 . "\",\n" }' input2.txt

输出:

signalType:"Signal Rate",

它的工作原理是在正则表达式中捕获2个组,一个用于标题,一个用于名称。 -ne标志遍历文件的每一行,并在单引号之间执行代码。 $1$2是我们捕获的群组,最后会打印出来。

作为提示,如果您发布输入,预期输出,遇到的错误以及在提问时已尝试过的代码,则可以更轻松地为您提供帮助。


编辑只是想放置一个免责声明,最好用模块解析JSON,因为如果你在标题或名称中转义"怎么办?这个正则表达式不会捡起来,但JSON解析器可以为你处理这些类型的案例。