2016-04-28 10 views
0

Это возвращает неверные результаты: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" /> 

Пожалуйста, кто-нибудь сказать, почему мой «Роллинг» показывает, когда я даже ЗАДАНИЕ характер после того, как "должен либо быть Е или Т, а не R !?

Редактировать : Пожалуйста, если вы расскажете мне, как это сделать с помощью другого инструмента, укажите, почему он не работает с sed первым.

+1

Стартовая линия не проверяется на шаблон конца. Линии «Rolling» завершают группу. – jthill

+0

Я вижу. Может быть, лучше просто сделать 's//g', но в этом неведении, почему он пропускает первый />, а также добавляет '/^.+? nanthil

+1

Проблема в том, что вы соответствуете до '/>', которая соответствует последнему экземпляру '/>'. Вы можете использовать 'sed -rn '/ anubhava

ответ

0

Вы соответствуете всем строкам в линейном диапазоне, который начинается с шаблона:

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

и заканчивается с рисунком:

/> 

Я думаю, ваше намерение было соответствовать /> на той же строке, но после того, как первый образец сопоставляется он переходит к следующей строке и будет соответствовать любой строке, в том числе в /> ,