Как удалить строку, отличную от шаблона?

У меня есть файл 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
0
10.05.2019, 12:55
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).

0
28.01.2020, 02:40

В sedвы бы использовали расширенное регулярное выражение с опцией-E:

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

()вокруг ULUSAL|HABER|BELGESELубедитесь, что |применяется только к рисункам внутри.

Строка без шаблона (и !позади шаблона )удаляется. Все остальные строки (с шаблонами )выполняют n;n, поэтому печатается сама строка, а также next и после нее next пустая строка.

1
28.01.2020, 02:40

Теги

Похожие вопросы