Program Tip

sed 특정 문자열을 포함하지 않는 줄 삭제

programtip 2020. 12. 11. 19:17
반응형

sed 특정 문자열을 포함하지 않는 줄 삭제


나는 처음 sed이며 다음 질문이 있습니다. 이 예에서 :

some text here
blah blah 123
another new line
some other text as well
another line

나도 문자열 '텍스트'가 포함를 제외한 모든 라인 삭제할 하고 , 또는 문자열 'ㅋ'이처럼 내 출력 파일 외모 때문에 :

some text here
blah blah 123
some other text as well

이것을 사용하여 sed어떻게 할 수 있는지 힌트 ?


이것은 당신을 위해 일할 수 있습니다.

sed '/text\|blah/!d' file
some text here
blah blah 123
some other text as well

'text'또는 'blah'(또는 둘 다)와 일치하는 행만 인쇄하려고합니다. 여기서 'and'와 'or'의 구분이 다소 중요합니다.

sed -n -e '/text/{p;n;}' -e '/blah/{p;n;}' your_data_file

-n수단은 기본적으로 인쇄되지 않습니다. 첫 번째 패턴은 '텍스트'를 검색하고 일치하면 인쇄하고 다음 줄로 건너 뜁니다. 두 번째 패턴은 'blah'에 대해 동일합니다. 'n'이 없으면 'text and blah'가 포함 된 행이 두 번 인쇄됩니다. 를 사용할 수도 있지만 -e '/blah/p'대칭이 더 좋습니다. 특히 일치하는 단어 목록을 확장해야하는 경우 더욱 그렇습니다.

사용중인 버전이 sed확장 정규식 지원하는 경우 (예 : GNU sed에서를 사용 -r) 다음 과 같이 단순화 할 수 있습니다.

sed -r -n -e '/text|blah/p' your_data_file

awk를 통해 간단히 할 수 있습니다.

$ awk '/blah|text/' file
some text here
blah blah 123
some other text as well

참고 URL : https://stackoverflow.com/questions/9541867/sed-delete-lines-not-containing-specific-string

반응형