繁体   English   中英

正则表达式和sed-删除文本文件中的所有内容,但删除文件名

[英]Regex and sed - remove everything in a text file but filenames

我正在尝试清除列表文件中的文本。 这是一个示例:

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

似乎没有任何工作。

在线文件名输出正确的命令吗?

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

您的正则表达式中也有错字, [Az]应该为[AZ]
-i--ignore-case ignore --ignore-case忽略大小写区别
-o ,-- --only-matching仅显示匹配PATTERN的行的一部分
-P ,-- --perl-regexp PATTERN是Perl正则表达式

我可以看到您为正则表达式付出了巨大的努力,因此我建议您这样做。

但是,除了awk的print $2干净print $2方式之外,您还可以使用sed真正clean其他内容:

sed -E 's/^[^ \t]*[ \t]+//;s/(\.mp4).*/\1/' text

从行首到空格(包括)中删除所有内容,
并删除.mp4之后的所有内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM