2016-04-28 123 views
0

這是返回不正確的結果:桑達正則表達式返回不正確的結果

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

未檢查結束模式的起始行。 「滾動」行結束了該組。 – jthill

+0

我明白了。簡單地做一個's//g'可能會更好,但是在這種情況下,爲什麼它跳過第一個/>,並且還添加了'/^.+? nanthil

+1

問題是,你匹配到'/>'匹配到'/>'的最後一個實例。你可以使用'sed -rn'/ anubhava

回答

0

您正在匹配以線型開頭的所有線條:

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

與模式結束:

/> 

我想你的目的是要在/>在同一行匹配,但一旦第一圖案匹配它移動到下一行,並會匹配包括/>任何線。