sed
не поддерживает некоторые функции регулярных выражений.
Попробуйте grep
:
grep -ioP '([A-Z])*(-)(\d{4})(-)(\d{2})(-)(\d{2})_(\d{2})-(\d{2})-(\d{2}h)(\.)(mp4)' text
Вывод:
CNEWS-2018-12-01_07-00-00h.mp4
franceinfo-2018-12-01_06-30-00h.mp4
LCI-2018-12-01_06-00-00h.mp4
BFMTV-2018-12-01_05-30-00h.mp4
franceinfo-2018-12-01_04-30-00h.mp4
BFMTV-2018-12-01_03-30-00h.mp4
Также в вашем регулярном выражении есть опечатка,[A-z]
должно быть [A-Z]
.
-i
, --ignore-case
игнорировать различия регистра
-o
, --only-matching
показывать только часть строки, соответствующую PATTERN
-P
, --perl-regexp
PATTERN - это регулярное выражение Perl
Я вижу, что вы прикладываете много усилий к своему регулярному выражению, поэтому я предложил это.
Однако, кроме чистого print $2
способа в awk, вы можете использовать sed и для clean
других вещей:
sed -E 's/^[^ \t]*[ \t]+//;s/(\.mp4).*/\1/' text
Это удалить все, начиная от начала строки до пробелов (включая),
и удалите все после .mp4