GREP PCRE RegExp:匹配所需行,然后匹配数字,然后删除逗号以仅匹配数字

GREP PCRE RegExp:匹配所需行,然后匹配数字,然后删除逗号以仅匹配数字

在...的帮助下https://regexr.com/我正在努力理解和学习grep -P

到目前为止,我设法得到这个结果:

$ cat Dogtooth\ \[2001\,\ Lanthimos\ Yorgos\].mp4.info
Filename:               Dogtooth [2001, Lanthimos Yorgos].mp4
Title:                  Κυνόδοντας
File size:              4,240,762,886 bytes
Video duration:         5,839 seconds

我成功获得了价值文件名^F\w+\:\s+\K.+\.\w{1,4}$

$ grep -o -P '^F\w+\:\s+\K.+\.\w{1,4}$' Dogtooth\ \[2001\,\ Lanthimos\ Yorgos\].mp4.info

输出到Dogtooth [2001, Lanthimos Yorgos].mp4

耶!! :D


但现在头痛的事来了……

我无法获取值文件大小

原始字符串:

  • File size: 4,240,762,886 bytes

预期结果:

  • 4240762886

我只做到了这一点(匹配数字):(^.*size\:\s+\b)\K(\d.+\d)

但我还是想念如何摆脱那些该死的逗号...

答案1

我建议你不能只使用 grep 来执行此操作:

grep -P -o 'File size:\s+\K[\d,]+' file.info | tr -d ,
4240762886

-o选项仅输出匹配的文本而不是整行。

答案2

使用任何 POSIX awk:

$ awk -F':' '{tag=$1; sub(/[^:]*:[[:space:]]*/,"")} tag=="Filename"' file
Dogtooth [2001, Lanthimos Yorgos].mp4

$ awk -F':' '{tag=$1; sub(/[^:]*:[[:space:]]*/,"")} tag=="Title"' file
Κυνόδοντας

$ awk -F':' '{tag=$1; sub(/[^:]*:[[:space:]]*/,"")} tag=="File size"{gsub(/,| .*/,""); print}' file
4240762886

$ awk -F':' '{tag=$1; sub(/[^:]*:[[:space:]]*/,"")} tag=="Video duration"{gsub(/,| .*/,""); print}' file
5839

记住那句话:有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。

相关内容