동일한 접미사가 붙은 파일 이름의 첫 부분을 추출하는 방법은 무엇입니까?

동일한 접미사가 붙은 파일 이름의 첫 부분을 추출하는 방법은 무엇입니까?

가변 길이 파일 이름의 접두사를 얻고 싶습니다.

In: some_filename_123-uniq.tar.gz
Out: some_filename_123
In: some_filename_1-uniq.tar.gz
Out: some_filename_1

이것은 내가 원하는 것과 정반대입니다 -uniq.tar.gz.

result=$(echo *-uniq.tar.gz | rev | cut -c-12 | rev)
echo $result

-uniq.tar.gz접미사가 붙은 항목은 하나만 있습니다 .

가장 쉬운 방법인 것처럼 보이는 매개변수 대체를 사용해 보았으나 구문 오류가 발생했습니다.

${"some_filename_123-uniq.tar.gz"//"-uniq.tar.gz"}
bash: ${"some_filename_123-uniq.tar.gz"/""/"-uniq.tar.gz"}: bad substitution

답변1

가장 쉬운 방법인 것 같은 매개변수 대체를 사용해 보았습니다.

그것가장 간단한 방법(이름에서 알 수 있듯이 주석에서 지적했듯이 쉘은확장된 매개변수/변수); (마지 못해) 접미사를 제거하는
경우 ${var%-*}(이 경우 마지막 것부터 시작 -):

for f in ./*-uniq.tar.gz
do
printf %s\\n "${f%-*}"   
done

아니면 ${var:offset:length}마지막 것을 삭제하세요질소문자(여기서길이음의 정수입니다):

for f in ./*-uniq.tar.gz
do
printf %s\\n "${f:0:-12}"
done

답변2

빠르고 더러운 방법은 다음과 같습니다. sed를 사용하여 해당 문자열을 아무것도 없는 것으로 바꾸십시오(삭제).

for i in *-uniq.tar.gz
do
result=$(echo $i | sed 's/-uniq.tar.gz$//')
echo "$result"
done

위의 코드는 디렉터리를 반복하면서 -uniq.tar.gz로 끝나는 모든 항목을 찾은 다음 후행 부분을 제거한 후 결과를 표시합니다.

관련 정보