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)?$)'