gpt4 book ai didi

shell - 仅当该部分中的一行包含其中的某个字符串时,如何在两个正则表达式之间打印该文件部分

转载 作者:行者123 更新时间:2023-12-01 15:06:50 24 4
gpt4 key购买 nike

我有一个事件文件,在 <event> 之间有多个多行事件。和 </event>标签。我想从 <event> 打印出整个事件至 </event>仅当该事件中的一行包含字符串 uniqueId="1279939300.862594_PFM_1_1912320699"或 uniqueId="1281686522.353435_PFM_1_988171542"时。该文件中有 100000 个事件,每个事件有 20 到 35 行(事件中的属性会改变其长度)。我开始使用 sed 但需要一些帮助:

cat xmlEventLog_2010-03-23T* | sed -nr "/<event eventTimestamp/,/<\/event>/"

我需要做什么才能完成这个?考虑到文件的大小,sed 也是执行此操作的最佳方法吗?

提前致谢

一个

我想编辑这个来更新。由于某些原因,我想用 sed 来做这件事。我尝试了 Denis 的解决方案,但它似乎不起作用:

bash$ grep 1279939300.862594_PFM_1_1912320699 xmlEventLog*
xmlEventLog_2010-03-23T02:41:15_PFM_1_1.xml: <event eventTimestamp="2010-03-23T02:41:40.861" originalReceivedMessageSize="0" uniqueId="1279939300.862594_PFM_1_1912320699">
bash$ grep 1281686522.353435_PFM_1_988171542 xmlEventLog*
xmlEventLog_2010-03-23T07:47:38_PFM_1_1.xml: <event eventTimestamp="2010-03-23T08:02:02.299" originalReceivedMessageSize="685" uniqueId="1281686522.353435_PFM_1_988171542">
bash$ time sed -n ':a; /<event>/,/<\/event>/ N; /<event>/,/<\/event>/!b; /<\/event>/ {/uniqueId="1279939300.862594_PFM_1_1912320699"\|uniqueId="1281686522.353435_PFM_1_988171542"/p;d}; ba' xmlEventLog*

real 1m13.134s
user 1m12.463s
sys 0m0.659s
bash$

这显然什么也没有返回。那么可以用 sed 做到这一点吗?

一个

最佳答案

awk -vRS="</event>" '/<event>/ && /1279939300.862594_PFM_1_1912320699|1281686522.353435_PFM_1_988171542/{print}' file

关于shell - 仅当该部分中的一行包含其中的某个字符串时,如何在两个正则表达式之间打印该文件部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3584554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com