在...的帮助下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