산출

산출

나는 다양한 상황에서 정규식에 매우 익숙하지만 bash 하위 문자열 일치는 나를 혼란스럽게 합니다. 누군가 나에게 그것을 설명할 수 있습니까? 가능하면 몇 가지 예를 들어야 합니까? Google에서 찾은 예는 매우 간단하고 매우 일반적인(제한된 경우) 정규식 일치를 제안하지만 실제 상황에서 사용하려고 하면 결코 작동하지 않습니다. 제가 이해한 바에 따르면 하위 문자열 일치는 다음과 같이 작동해야 합니다.

result=${string##pattern}

"pattern"과 일치하는 "string"에서 가장 긴 부분 문자열이 처음부터 검색됩니다. "문자열"에서 해당 일치 항목을 제거하고 나머지를 "결과"에 넣습니다. 그러나 다음 사항을 고려하십시오.

temp=${myvar##[^0-9]*} && echo $temp

내가 아는 한, 내 패턴은 "0개 이상의 숫자가 아닌 문자"와 일치해야 합니다. 즉, 문자열 시작 부분에서 가장 긴 일치 항목입니다. 그럼 예를 들어보겠습니다:

myvar=my_file_123_45.txt

"my_file_" 문자가 일치할 것으로 예상해야 합니다. 이는 "문자열"의 시작 부분부터 시작하는 숫자가 아닌 문자의 가장 긴 조합입니다. 대신 반환된 결과는 비어 있습니다! 모든 것이 일치합니다! 제외된 번호는 어떻게 되나요? ! gedit(정규식 엔진 검색 및 교체 사용) 및 Labview의 정규식 도구에서 패턴 일치

pattern=^[^0-9]*

나는 이것이 동일하다고 생각하며 그 결과는 내가 예상했던 'my_file_'과 일치합니다. 배쉬는 무엇이 다른가요?

답변1

regexes.대신 Bash 대체 일치가 사용되지 않고 wildcard expansion# ## %% % 와 함께 사용되어 어느 방향에서든 가장 짧은 일치와 가장 긴 일치를 확인해야 합니다 .

숫자가 아닌 선행 문자를 얻으려는 특정 상황에서는 다음 전략을 사용할 수 있습니다.

echo "${myVar%%[0-9]*}"; # delete upto the leftmost digit starting from right

산출

my_file_

http://www.tldp.org/LDP/abs/html/parameter-substitution.html모든 Bash 매개변수 관련 질문에 대해 다음 사이트가 특히 유용하다고 생각합니다 .

관련 정보