【发布时间】:2013-09-09 21:41:54
【问题描述】:
例如; 我有一个长文件,其中包含:
Somestring anotherstring -xone xcont othertring -yone ycont againother \
-detail "detail Contents within quote" stuff morestuff ..
Somestring anotherstring -xone xcont othertring -yone ycont againother \
morestrings -detail detailCont morestrings etc.. ..
想要的输出:
-xone xcont
-ycont ycont
-detail "detail Contents withing quote"
最好有一个 csv 文件:
xone yone detail
xcont ycont "detail Contents within quote"
获得所需输出的最佳方法是什么?我一直在尝试使用 sed 命令,但成功非常有限。我是 perl 的新手,所以也没有走得太远。请解释建议的解决方案。 提前致谢!
【问题讨论】:
-
我不明白你在问什么。什么标识了您感兴趣的行?是从“Somestring anotherstring”开始的行吗?你所追求的信息是什么?在匹配行或下一行找到所有选项,例如
-xone和-detail?并且输出只是诸如-xone之类的“键”和诸如xcont之类的值?处理双引号字符串会使事情变得复杂——转义嵌入式双引号的规则是什么? 'keys' 列表是固定在显示的三个(-xone、-xcont和-detail)还是任何破折号+名称字符串? -
我感兴趣的字符串前面有'-',后面的信息是我所追求的。不幸的是,每一行都不一样;有的长,有的短。是的,我感兴趣的密钥对是: -xone xcont -ycont ycont -detail "detail Contents withing quote"
-
OK:只是为了检查。您正在寻找任何字符串
-xone和以下字符串,或-yone和以下字符串,或-detail和以下双引号字符串,无需担心嵌入的双引号。此外,这些条目都应该在成对的相邻行上找到,并且组打印在一起。理想情况下,输出格式应该是 CSV(或者您想要制表符分隔值、TSV 还是其他格式方案?)。 -
我遇到了我无法弄清楚的二年级错误:这就是我所做的:#!/usr/bin/perl use strict;使用警告;我的 $regex = qr/-(?
\w+) \s+ (?: (?\w+) | "(? [^ "]+)" )/x; while () { while (/$regex/g) { say qq($+{key}: "$+{val}"); } } 我在哪里/如何阅读包含正在搜索的数据的文件?我收到两个不同的错误:序列 (?