我需要在文本中找到一个特定的字符串,然后根据字符串的位置,找到一个关闭它的第二个字符串(向后)并打印信息。我得到了以下内容:
ValueError: cannot reindex a non-unique index with a method or limit
文字全部都是一行,我将它分开分开,以便更容易查看。最初它看起来像这样:
<tile x="143" y="43" z="7">
<item id="2656"/>
<item id="2111" count="5"/>
<item id="2194"/>
<item id="2205"/>
<item id="2400"/>
</tile>
<tile x="143" y="44" z="7">
<item id="2656"/>
<item id="2111" count="5"/>
<item id="2194"/>
<item id="2205"/>
</tile>
<tile x="143" y="45" z="7">
<item id="2656"/>
<item id="2111" count="5"/>
<item id="2194"/>
<item id="2205"/>
</tile>
<tile x="144" y="43" z="7">
<item id="2656"/>
<item id="2194"/>
<item id="2111" count="5"/>
<item id="2506" special_description="something something something (Arm:12) [Test]"/>
<item id="2194"/>
<item id="2216"/>
<item id="2400"/>
</tile>
<tile x="144" y="44" z="7">
<item id="2656"/>
<item id="2111" count="5"/>
<item id="2194"/>
<item id="2418"/>
<item id="2216"/>
<item id="2431"/>
</tile>
<tile x="144" y="45" z="7">
<item id="2656"/>
<item id="2658"/>
<item id="2111" count="5"/>
<item id="2506" special_description="something something (Arm:12) [Whatever]"/>
<item id="2194"/>
<item id="2216"/>
</tile>
<tile x="146" y="43" z="7">
<item id="1738"/>
<item id="1738"/>
<item id="1738"/>
<item id="2160" count="50"/>
<item id="2183"/>
<item id="2127"/>
<item id="2127"/>
<item id="2205"/>
<item id="2506"/>
<item id="2127"/>
</tile>
让我们说我正在寻找2个特定的项目ID - 2506和2418.我在使用grep的第四个tile块中找到2506,现在我想看看是什么瓷砖坐标:
我发现了这个:
<tile x="143" y="43" z="7"><item id="2656"/><item id="2111" count="5"/><item id="2194"/><item id="2205"/><item id="2400"/></tile><tile x="143" y="44" z="7">...
在它正上方我找到了:
<item id="2506" special_description="something something something (Arm:12) [Test]"/>
我如何能够为所有这些信息提取磁贴信息,获取特殊描述(如果存在)并生成日志?
理想情况下它看起来像这样(但只要我提取了所有信息,输出就不那么重要了):
<tile x="144" y="43" z="7">
理想情况下,如果有人能为我提供一个现成的解决方案,我们将非常感激,但只需一个有用的指针即可!
答案 0 :(得分:1)
awk
救援!
这可能会让你开始......
$ awk -F'\n' -v RS= '/id="2506"/{print $1}' file
<tile x="144" y="43" z="7">
<tile x="144" y="45" z="7">
<tile x="146" y="43" z="7">
答案 1 :(得分:1)
最好编写一个脚本来执行此操作。这是伪代码:
for all lines in file do {
if line =~ /pattern1/ {
match1 = line
}
elsif line =~ /pattern2/ {
echo line, match1
}
}