Regex и sed - удалить все в текстовом файле, кроме имен файлов - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь очистить список файлов текста. Вот образец:

15Tlb3Bsn5ec71Os6paEyTpf-5YkTsjwo   CNEWS-2018-12-01_07-00-00h.mp4             bin    1.5 GB     2018-12-03 16:03:00
1irhwA-tcExWXs-ksyOQuEBYL-LDktMQB   franceinfo-2018-12-01_06-30-00h.mp4        bin    949.2 MB   2018-12-03 18:43:10
1UEjtEtU27gMA-Bf7J1rTVhFn9D5z0Rjb   LCI-2018-12-01_06-00-00h.mp4               bin    908.2 MB   2018-12-03 17:30:11
1_ouEY6Ugg8h_XvzjE4j4m751o3eMNxhh   BFMTV-2018-12-01_05-30-00h.mp4             bin    1.2 GB     2018-12-03 14:33:25
1f7JWvb6PM9PRhFimXKc8k81qiTVKwe-e   franceinfo-2018-12-01_04-30-00h.mp4        bin    1.0 GB     2018-12-03 18:43:36
1nKzPZw6tKNzErmWdwbq8f-47DSF4cQbt   BFMTV-2018-12-01_03-30-00h.mp4             bin    1.2 GB     2018-12-03 14:33:03

Так что я думаю, что это выражение может работать:

([A-z])*(-)(\d{4})(-)(\d{2})(-)(\d{2})_(\d{2})-(\d{2})-(\d{2}h)(\.)(mp4)

Но я пробовал много команд sed, например:

sed -n -E 's/([A-z])*(-)(\d{4})(-)(\d{2})(-)(\d{2})_(\d{2})-(\d{2})-(\d{2}h)(\.)(mp4)/\2/p' /media/partage/v2/backupGdriveListOnline.txt

И, похоже, ничего не работает.

Правильно ли выводить команды в режиме онлайн с именами файлов?

1 Ответ

0 голосов
/ 02 января 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...