파일 이름에 특정(알려진) 확장자가 있는 경우 이를 제거합니다.

파일 이름에 특정(알려진) 확장자가 있는 경우 이를 제거합니다.

grep단일 데이터 행에서 정규식을 사용하고 싶은지 확실하지 않습니다 . 인터넷 검색을 통해 grep모든 .ext파일과 일치하고 기본 이름을 반환하는 다음 예측 표현식을 찾았습니다 .

XX@XX:/$ echo name.ext | grep -oP [^\.]+(?=.ext)
name

이것은 훌륭하게 작동하지만 이제 사용자에게 파일을 저장하라는 메시지가 표시되므로 확장자와 함께 이름을 입력할지 확실하지 않습니다. 모든 이름이 일치하는지 확인하면서 미리보기를 조건부로 설정해 보았지만 이해할 수 없는 결과가 반환되었습니다.

XX@XX:/$ echo name.ext | grep -oP "[^\.]+(?=.ext)?"
name
ext

확장명을 생략하면 작동합니다.

XX@XX:/$ echo name | grep -oP "[^\.]+(?=.ext)?"
name

그렇다면 이것은 grep 문제입니까 아니면 정규식 문제입니까? 어떻게든 미리보기를 캡처하지 않도록 해야 할까요?

답변1

POSIX 쉘 대체를 사용하여 다음을 제거할 수 있습니다 .ext.

file='name.ext'
printf '%s\n' "${file%.ext}"

확장된 자유 문자열을 새 변수에 할당하려면 다음을 수행하십시오.

noext="${file%.ext}"

답변2

귀하의 접근 방식을 사용하십시오 (더 나은 솔루션이 있습니다):

echo name | grep -oP '^[^.]+(?=(\.ext)?$)'

관련 정보