使用sed、awk提取模式之间的数据行,直到具有特殊字符的行的开头

使用sed、awk提取模式之间的数据行,直到具有特殊字符的行的开头,sed,awk,grep,Sed,Awk,Grep,我有以下xml ## 13 Aug 2013 14:53:44, 390 [INFO] OrderId 100 otherInfo <someXML>details <info>details<info> <info1>details<info1> </someXML> ## 13 Aug 2013 14:53:44, 390 [INFO] OrderId 105 otherInfo <someXML>detai

我有以下xml

## 13 Aug 2013 14:53:44, 390 [INFO] OrderId 100 otherInfo
<someXML>details
<info>details<info>
<info1>details<info1>
</someXML>
## 13 Aug 2013 14:53:44, 390 [INFO] OrderId 105 otherInfo
<someXML>details
<info>details<info>
<info1>details<info1>
</someXML>
## 13 Aug 2013 14:55:45, 490 [INFO] OrderId 100 otherInfo  
<someXML>details
<info>details<info>
<info1>details<info1>
</someXML>
## 13 Aug 2013 14:53:44, 390 [INFO] OrderId 105 otherInfo
<someXML>details
<info>details<info>
<info1>details<info1>
</someXML>
##2013年8月13日14:53:44390[信息]订单ID 100其他信息
细节
细节
细节
##2013年8月13日14:53:44390[信息]订单ID 105其他信息
细节
细节
细节
##2013年8月13日14:55:45490[信息]订单ID 100其他信息
细节
细节
细节
##2013年8月13日14:53:44390[信息]订单ID 105其他信息
细节
细节
细节
我想搜索orderid为“example orderid 100”的特定行,并打印该行及其下的所有内容,直到下一个以doulbe hash(###)开头的订单行 因此,如果我使用OrderID100搜索,我应该得到以下结果

## 13 Aug 2013 14:53:44, 390 [INFO] OrderId 100 otherInfo
<someXML>details
<info>details<info>
<info1>details<info1>
</someXML>
## 13 Aug 2013 14:55:45, 490 [INFO] OrderId 100 otherInfo 
<someXML>details
<info>details<info>
<info1>details<info1>
</someXML>
##2013年8月13日14:53:44390[信息]订单ID 100其他信息
细节
细节
细节
##2013年8月13日14:55:45490[信息]订单ID 100其他信息
细节
细节
细节

您的记录被很好地分开,因此将记录分隔符设置为
#
,然后搜索所需的
医嘱ID

$ awk '/OrderId 100/{print RS $0}' RS='##' ORS=''  file
## 13 Aug 2013 14:53:44, 390 [INFO] OrderId 100 otherInfo
<someXML>details
<info>details<info>
<info1>details<info1>
</someXML>
## 13 Aug 2013 14:55:45, 490 [INFO] OrderId 100 otherInfo
<someXML>details
<info>details<info>
<info1>details<info1>
</someXML>
$awk'/OrderId 100/{print RS$0}'RS='###'ORS=''文件
##2013年8月13日14:53:44390[信息]订单ID 100其他信息
细节
细节
细节
##2013年8月13日14:55:45490[信息]订单ID 100其他信息
细节
细节
细节
这可能适合您(GNU-sed):


值得一提的是,将RS设置为多个字符会使这个GNU awk特定。这非常有用。。。。是否有任何方法可以使用awk命令根据FROM dateTime和ToDateTime提取orderid?如果datetime是以示例中的格式给出的,则只需将正则表达式字符串
/OrderId 100/
替换为要匹配的正则表达式即可。如果这个答案解决了你的问题,那么你应该通过点击旁边的勾号来接受它。
sed '/OrderId 100/!d;:a;$!{n;/^##/{s/^/\n/;D};ba}' file