점이 여러 개인 파일 이름에서 확장자를 추출하고 싶습니다. 예를 들어:
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
.