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

응! ! :디


그런데 이제 머리가 아프다...

값을 얻을 수 없습니다파일 크기

원래 문자열:

  • 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

다음 문장을 기억하세요.어떤 사람들은 문제에 직면했을 때 "알겠습니다. 정규식을 사용하겠습니다"라고 생각합니다. 이제 그들은 두 가지 문제를 안고 있습니다..

관련 정보