带有grep的复杂管道

问题描述 投票:0回答:1

我确信脚本中有很多方法可以做到这一点。但是我有一个非常特定的用例,在这个用例中,为什么我需要像我一样做。

这里是用例。我有一个非常大的XML文件,并使用以下命令找到了开始标记:

grep '<opening-tag>' -n ~/.dir/27-6-2019.xml | grep -Eo '^[^:]+'

这很好用,让我知道了每个标签的开头。要获得结束标记,我要做的就是将行号减一,并且在脚本中效果很好。

然后我运行此命令以获取文件中的xml内容(这是在脚本的上下文中:]

awk 'NR >= $startingIndex && NR <= ($closingIndex - 1) path-to-file

再一次,效果很好。

但是我想实现的目标如下:

grep '<open-tag>' -n ~/.dir/27-6-2019.xml | $STAT_INDEX=$(grep -Eo '^[^:]+') | if [$LAST_LINE]; awk 'NR >= $STAT_INDEX && NR <= ($LAST_LINE - 1) path-to-file > "dir/$STAT_INDEX.xml" | LAST_LINE=$STAT_INDEX

基本上在我执行grep命令和管道时,然后检查是否已创建var $ last_line var,然后提取xml obj并将其保存到另一个文件。我需要最后一行的原因是因为在第一次运行时,我将不知道新对象的下一个起始索引,等等。

我不确定这是否有可能。但我正在尽力做到这一点。

谢谢

如果有其他方法无需依赖脚本或终端xml解析器之类的工具(因为我已经尝试过它们,而它们没有做我需要的事情,那么请告诉我。

---------- grep逻辑-------------

这将获得所有打开的标记行

grep '<open-tag>' -n ~/.dir/27-6-2019.xml

管道

示例阀:12343:

$STAT_INDEX=$(grep -Eo '^[^:]+') 

为其余的管道过程设置访问变量

管道

然后检查是否设置了称为最后一行的变量,如果是,请执行此命令从thr文件中检索xml obj并将其保存到自己的文件中

if [$LAST_LINE]; awk 'NR >= $STAT_INDEX && NR <= ($LAST_LINE - 1) path-to-file > "dir/$STAT_INDEX.xml"

管道保存最后一行,以供下一个grep流程处理

LAST_LINE=$STAT_INDEX
xml bash grep
1个回答
0
投票

请勿使用grep,sed,awk处理XML文件。使用XML解析器。发布XML文件的简化版本,以便获得更合理的响应。

© www.soinside.com 2019 - 2024. All rights reserved.