가변 길이 파일 이름의 접두사를 얻고 싶습니다.
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로 끝나는 모든 항목을 찾은 다음 후행 부분을 제거한 후 결과를 표시합니다.