这会返回不正确的结果:
sed -regex -no print '/everythingbetween/,/thesephrases/p'
酷。现在让我逐步完成我的sed命令:
'/<literal string...="[collectionofcharacters(I also tried ^ at the beginning)]
.(anycharacter)+(greedy)?(lessgreedy, or until first instance of the following)
DBAppender(string literal)/,/ \/>(another string literal)/p'
我的实际陈述
sed -rn '/<appender-ref ref="[ET].+?DBAppender/,/\/>/p'
结果。
<appender-ref ref="ErrorDBAppender" />
<appender-ref ref="TracingDBAppender" />
<appender-ref ref="ErrorDBAppender" />
<appender-ref ref="RollingFileAppender" />
<appender-ref ref="ErrorDBAppender" />
<appender-ref ref="RollingFileAppender" />
<appender-ref ref="ErrorDBAppender" />
<appender-ref ref="TracingDBAppender" />
<appender-ref ref="ErrorDBAppender" />
<appender-ref ref="TracingDBAppender" />
<appender-ref ref="ErrorDBAppender" />
请有人告诉我为什么“滚动”出现在我甚至在“必须是E或T,而不是R!?
之后指定字符时”编辑:如果您要告诉我如何使用其他工具执行此操作,请先说明为什么它不能使用sed。
答案 0 :(得分:0)
您正在匹配行范围中的所有行,以pattern:
开头<appender-ref ref="[ET].+?DBAppender
以模式结束:
/>
我认为你的意图是匹配同一行的/>
,但是一旦第一个模式匹配,它就会移动到下一行并匹配任何一行,包括/>
。