相关疑难解决方法(0)

什么是JSON的良好CLI工具?

一般问题

虽然我可以诊断事件的根本原因,确定有多少用户受到影响,或蒸馏时间日志,以评估性能和近期代码更改吞吐量的影响,我的工具保持不变:grep,awk,sed,tr,uniq,sort,zcat,tail,head,join,和split.为了将它们粘合在一起,Unix为我们提供了管道,并且我们有更好的过滤xargs.如果这些让我失望,那就永远都是perl -e.

这些工具非常适合处理CSV文件,制表符分隔文件,具有可预测行格式的日志文件或具有逗号分隔键值对的文件.换句话说,每行都没有上下文的文件.

XML类似物

我最近需要浏览千兆字节的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有没有这样的工具?一些调查任务要求我对JSON文件进行类似的查询只是时间问题,并且没有像XPath和XSLT这样的工具,这样的任务将会困难得多.如果我有一堆看起来像这样的JSON:

{
  "firstName": "Bender",
  "lastName": "Robot",
  "age": 200,
  "address": {
    "streetAddress": "123",
    "city": "New …
Run Code Online (Sandbox Code Playgroud)

xslt xpath command-line json

59
推荐指数
4
解决办法
2万
查看次数

从简单的XML文件中提取数据

我有一个包含以下内容的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.

xml bash awk grep sed

40
推荐指数
7
解决办法
9万
查看次数

12
推荐指数
2
解决办法
6335
查看次数

从unix命令行执行基本xml解析的最简单方法

我正在搜索具有某些属性的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选项完成,但是没有任何运气让它在我的情况下工作.有更简单的方法吗?

xml unix perl awk grep

10
推荐指数
2
解决办法
2万
查看次数

bash(sed或awk首选)删除第一个和最后一个实例之间的所有内容

我对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*等.

如果有类似的事情已经被问到并在某处我回答道歉,我确实在发布之前找到了解决方案.

谢谢!

regex bash awk sed

2
推荐指数
1
解决办法
1153
查看次数

标签 统计

awk ×3

bash ×2

grep ×2

sed ×2

xml ×2

.net ×1

c# ×1

command-line ×1

json ×1

perl ×1

regex ×1

unix ×1

visual-studio ×1

xpath ×1

xslt ×1