Sed正则表达式返回不正确的结果

时间:2016-04-28 17:00:34

标签: regex bash sed

这会返回不正确的结果:

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。

1 个答案:

答案 0 :(得分:0)

您正在匹配行范围中的所有行,以pattern:

开头
<appender-ref ref="[ET].+?DBAppender

以模式结束:

/>

我认为你的意图是匹配同一行的/>,但是一旦第一个模式匹配,它就会移动到下一行并匹配任何一行,包括/>