의 도움으로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
다음 문장을 기억하세요.어떤 사람들은 문제에 직면했을 때 "알겠습니다. 정규식을 사용하겠습니다"라고 생각합니다. 이제 그들은 두 가지 문제를 안고 있습니다..