虽然我可以诊断事件的根本原因,确定有多少用户受到影响,或蒸馏时间日志,以评估性能和近期代码更改吞吐量的影响,我的工具保持不变:grep,awk,sed,tr,uniq,sort,zcat,tail,head,join,和split.为了将它们粘合在一起,Unix为我们提供了管道,并且我们有更好的过滤xargs.如果这些让我失望,那就永远都是perl -e.
这些工具非常适合处理CSV文件,制表符分隔文件,具有可预测行格式的日志文件或具有逗号分隔键值对的文件.换句话说,每行都没有上下文的文件.
我最近需要浏览千兆字节的XML来构建用户的直方图.使用我的工具这很容易,但对于更复杂的查询,正常的方法会崩溃.假设我的文件包含以下内容:
<foo user="me">
<baz key="zoidberg" value="squid" />
<baz key="leela" value="cyclops" />
<baz key="fry" value="rube" />
</foo>
Run Code Online (Sandbox Code Playgroud)
让我们说我想生成一个从用户到平均<baz>每个s 的映射<foo>.逐行处理不再是一个选项:我需要知道<foo>我正在检查哪个用户,所以我知道要更新的平均值.完成这项任务的任何类型的Unix一行都可能是不可理解的.
幸运的是,在XML-land中,我们有很多精彩的技术,如XPath,XQuery和XSLT来帮助我们.
以前,我已经习惯使用精彩的XML::XPathPerl模块来完成上面的查询,但在找到可以针对当前窗口运行XPath表达式的TextMate插件后,我停止编写一次性Perl脚本来查询XML.我刚刚发现了正在安装的XMLStarlet,因为我输入了这个,并且我期待将来使用它.
所以这引出了我的问题:JSON有没有这样的工具?一些调查任务要求我对JSON文件进行类似的查询只是时间问题,并且没有像XPath和XSLT这样的工具,这样的任务将会困难得多.如果我有一堆看起来像这样的JSON:
{
"firstName": "Bender",
"lastName": "Robot",
"age": 200,
"address": {
"streetAddress": "123",
"city": "New …Run Code Online (Sandbox Code Playgroud) 我有一个包含以下内容的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<job xmlns="http://www.sample.com/">programming</job>
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来提取<job..> </job>标签中的内容,在这种情况下是programmin.这应该在linux命令提示符下完成,使用grep/sed/awk.
如何.csproj从命令提示符添加新文件?
我正在搜索具有某些属性的xml文件.例如,包含以下模式的文件:
<param-value>
<name>Hosts</name>
<description>some description</description>
<value></value>
</param-value>
Run Code Online (Sandbox Code Playgroud)
对于这样的文件,我想解析另一个标记的值,例如:
<param-value>
<name>Roles</name>
<description>some description</description>
<value>asdf</value>
</param-value>
Run Code Online (Sandbox Code Playgroud)
并打印出文件名和"asdf".从命令行完成此操作的最简单方法是什么?
我想到的一种方法是使用带有-l选项的grep来过滤匹配的文件,然后使用xargs grep来提取Roles的值.但是,grep不适用于多行正则表达式.我看到另一个问题表明它可以用-Pzo选项完成,但是没有任何运气让它在我的情况下工作.有更简单的方法吗?
我对sed非常熟悉,但我不太了解awk,我不知道如何解决这个问题.我已经google了一段时间但到目前为止没有运气.情况就是这样:我有一个包含组和部分的大文件,如下所示:
<A1>
some nr of lines
</A1>
<A2>
some nr
of lines
</A2>
<B1>
some
nr of
lines
</B1>
<B2>
some nr of lines
</B2>
<B3>
bla
</B3>
<C1>
bla
</C1>
<C2>
bla
</C2>
Run Code Online (Sandbox Code Playgroud)
现在问题是组的数量可以改变,部分的数量可以改变,并且每个部分中的行数可以改变.例如,A部分可能转到25,B部分可能转到8,依此类推.我需要做的是删除某些组的所有条目,在上面的示例中,我想删除所有内容<B*>,留下以下内容:
<A1>
some nr of lines
</A1>
<A2>
some nr
of lines
</A2>
<C1>
bla
</C1>
<C2>
bla
</C2>
Run Code Online (Sandbox Code Playgroud)
另外,我想删除几个部分(尽管这些部分可以在单独的运行中),例如,如果文件从A1转到R123,我想要删除B*,F*,M*等.
如果有类似的事情已经被问到并在某处我回答道歉,我确实在发布之前找到了解决方案.
谢谢!