
の助けを借りて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
次の文を思い出してください。何人かの人々が問題に直面したとき、「わかりました。正規表現を使います」と思います。今、彼らは2つの問題を抱えています。。