점이 여러 개 있는 파일 확장자를 찾는 방법

점이 여러 개 있는 파일 확장자를 찾는 방법

점이 여러 개인 파일 이름에서 확장자를 추출하고 싶습니다. 예를 들어:

gbamidi-v1.0.tar.gz

"gz" 또는 "0.tar.gz"가 아닌 "tar.gz"를 가져와야 합니다.

sed나는 bash 독점 기능( 또는 같은 posix 명령 사용)에 의존하지 않는 솔루션을 선호합니다 cut.

편집: 합리적인 해결책은 다음과 같습니다. "마지막 지점에서 두 번째 지점 이후의 모든 항목을 가져오되 길이가 <= 1인 숫자나 하위 문자열은 제외합니다."

답변1

확장자가 마침표 뒤의 문자로 시작한다고 가정하면 다음 명령이 인쇄됩니다 .tar.gz.

echo gbamidi-v1.0.tar.gz | awk \
    'BEGIN { FS = "\." } \
    { \
        extension = ""; \
        i = NF; \
        while ((i > 1) && (substr($i, 1, 1) ~ /[A-Za-z]/)) { \
            extension = "." $i extension; \
            i-- \
        }; \
        print extension \
    }'

답변2

모든 경우에 작동하지는 않지만 .gz확장 가능합니다. foo.tar.gz먼저 a로 추출한 foo.tar다음 보관을 취소해야 합니다. 명령어 하나로 이 작업을 수행할 수 있다는 점이 편리합니다.

연장을 받아야 하나요? 그것은 .gz.

다른 것이 필요한 경우 regex 등을 사용하여 해당 특정 항목을 타겟팅해야 awk합니다 cut.

관련 정보