패턴 외부의 문자열을 제거하는 방법은 무엇입니까?

패턴 외부의 문자열을 제거하는 방법은 무엇입니까?

아래와 같이 m3u 파일이 있습니다. 패턴과 다음 첫 번째 줄을 제외한 모든 문자열을 제거하고 싶습니다. 또는 패턴과 다음 라인을 다른 파일로 저장하세요.

모드 group-title="TR ULUSAL", group-title="TR HABER", group-title="TR BELGESEL" 원시 데이터:

#EXTINF:-1 tvg-id="" tvg-name="TRT HD 1080" tvg-logo="http://url/tr/trt.png" group-title="TR ULUSAL",TRT HD 1080
http://xxx.xx:xx/xx/xx/123

#EXTINF:-1 tvg-id="" tvg-name="THRILLER 16 Blocks" tvg-logo="http://url/Blocks.jpg" group-title="DEUTSCHE FILME",THRILLER 16 Blocks
http://xxx.xx:xx/xx/xx/632.mkv

#EXTINF:-1 tvg-id="" tvg-name="TRT HD 720" tvg-logo="http://url/trt.png" group-title="TR ULUSAL",TRT HD 720
http://xxx.xx:xx/xx/xx/218

#EXTINF:-1 tvg-id="" tvg-name="CNN TURK 1080" tvg-logo="http://url/cnnturkhd.png" group-title="TR HABER",CNN TURK 1080
http://xxx.xx:xx/xx/xx/926

#EXTINF:-1 tvg-id="" tvg-name="THRILLER 28 Weeks Later" tvg-logo="http://url/tr/Later.jpg" group-title="RUSSIA",THRILLER 28 Weeks Later
http://xxx.xx:xx/xx/xx/4805.mkv

#EXTINF:-1 tvg-id="" tvg-name="THRILLER 16 Blocks" tvg-logo="http://url/Blocks.jpg" group-title="TR DUBLAJ FILM",THRILLER 16 Blocks
http://xxx.xx:xx/xx/xx/632.mkv

#EXTINF:-1 tvg-id="" tvg-name="TRT BELGESEL HD 720" tvg-logo="http://url/trtb.png" group-title="TR BELGESEL",TRT BELGESEL 720
http://xxx.xx:xx/xx/xx/218

내가 기대하는 결과는 다음과 같습니다.

#EXTINF:-1 tvg-id="" tvg-name="TRT HD 1080" tvg-logo="http://url/tr/trt.png" group-title="TR ULUSAL",TRT HD 1080
http://xxx.xx:xx/xx/xx/123

#EXTINF:-1 tvg-id="" tvg-name="TRT HD 720" tvg-logo="http://url/trt.png" group-title="TR ULUSAL",TRT HD 720
http://xxx.xx:xx/xx/xx/218

#EXTINF:-1 tvg-id="" tvg-name="CNN TURK 1080" tvg-logo="http://url/cnnturkhd.png" group-title="TR HABER",CNN TURK 1080
http://xxx.xx:xx/xx/xx/926

#EXTINF:-1 tvg-id="" tvg-name="TRT BELGESEL 720" tvg-logo="http://url/trtb.png" group-title="TR BELGESEL",TRT BELGESEL 720
http://xxx.xx:xx/xx/xx/218

답변1

sed옵션과 함께 확장 정규식을 사용 합니다 -E.

sed -E '/group-title="TR (ULUSAL|HABER|BELGESEL)"/!d;n;n'

()서라운드가 내부 패턴에만 ULUSAL|HABER|BELGESEL적용되는지 확인하세요.|

!패턴이 없는 라인(패턴을 따르는 라인)은 삭제됩니다. 다른 모든 줄(패턴이 있는 줄)이 실행되므로 n;n줄 자체가 인쇄됩니다. next 줄 n다음에 빈 줄이 따라옵니다.

답변2

파일이 호출되고 inputfile출력이 다음 위치에 저장되어야 한다고 가정합니다 outputfile.

grep --no-group-separator -A 2 -E \
"group-title=\"TR ULUSAL\"|group-title=\"TR HABER\"|group-title=\"TR BELGESEL\"" \
inputfile > outputfile

이는 확장 정규식( -E) 및 사후 컨텍스트( )를 사용하여 -A달성됩니다 .

관련 정보