2014-09-30 2 views
0

bash 도구를 사용하여 태그 사이에서 콘텐츠를 잡아 내고 싶지만 패턴이 중간에 일치하는 경우에만 사용해야합니다. 나는이 파일이있는 경우Sed - 패턴 일치가 inbetween 인

예를 들어, :

<tag> 
CAT 
</tag> 

... 

<tag> 
DOG 
HORSE 
</tag> 

... 
<tag> 
DOG 
CAT 
</tag> 

를 I 출력이 원하는 :

<tag> 
CAT 
</tag> 
<tag> 
DOG 
CAT 
</tag> 

내가 여는 태그와 닫는 태그 cat file.txt | sed -n '/<tag/,/<\/tag/p'의 내용을 인쇄하기 위해 sed를 사용할 수 있지만 적어도 한 줄에 "CAT"이라는 단어가 있는지에 따라 "각 블록"을 어떻게 필터링합니까?

답변

1

sed으로 수행 할 수 있는지 확실하지 않습니다. 그러나 perl (bash 도구)을 사용하려는 경우이 정규식을 사용할 수 있습니다.

(<tag>(?=(?:(?!<\/tag>).)*CAT)(?:(?!<\/tag>).)*<\/tag>) 

는 그냥 captures.Do이 플래그 sg .See 데모를 추가하는 것을 잊지 잡아.

http://regex101.com/r/aW3pR4/8

+0

고마워요! 요즘 펄의 하나를 배워야한다는 의미였습니다. – anthonybell

+0

@anthonybell 당신이 사용한 마지막 ans를 게시 해주십시오 .... – vks

관련 문제