您好我的搜索结果为,
"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
但它没有工作
答案 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解析器可以为你处理这些类型的案例。