ksh 명령줄의 정규식 및 패턴

ksh 명령줄의 정규식 및 패턴

정규식 문자열 사용과 in a regex string *의 차이점이 무엇인지 알고 싶습니다..*

는 "0 ~ n 문자"를 의미하는 것 같은데 , 그것이 무엇을 의미하는지 *이해하지 못합니다 ..*

예를 들어 : 와 ? "2013*11*27"의 차이점은 무엇입니까 ? "2013.*11.*27"내가 보면

find . -name [pattern]

내가 시도한 패턴은 "2013.*11.*25"찾지 못했지만 "2013-11-25"을 사용하여 "2013*11*25"찾았습니다.

왜? 유닉스에서 와일드카드의 0 또는 n 발생은 *정규식에서 인데 .*왜 작동하지 않습니까?

답변1

*대표하다0개 이상의 임의 문자존재하다쉘 와일드카드성냥.

*대표하다0회 이상 발생이전 표현 존재하다정규식성냥.

.대표하다단일 임의 문자존재하다정규식성냥.

따라서 *셸의 와일드카드 일치는 .*정규식의 일치와 동일합니다.

"2013*11*27"정규식 일치일치 "2013333111111111127"하지만 일치하지 않습니다 . 그러나 이를 사용하여 파일을 찾는 경우(예 : 셸이 정규 표현식이 아닌) "셸 와일드카드 일치"로 처리하도록 하는 "2013-11-27"인수로 사용하면 잘 잡힐 것입니다.ls"2013-11-27"

* (귀하의 경우 표현식은 각각 해당 문자 3와 ​​정확히 일치하는 단일 문자입니다 1.)

답변2

먼저, 정규 표현식을 유닉스 쉘 모드와 분리해야 합니다.
ksh 명령에는 특수 옵션이 필요하며 Unix 모드를 사용하게 됩니다.
예를 들어, grep -R을 사용하면 정규식을 사용하게 됩니다.

정규식의 구문은 *0번 또는 n번을 의미합니다. 유닉스
모드 에서 는 *모든 문자열을 의미하며 줄 건너뛰기 여부에 따라 설정에 따라 달라집니다.
정규식을 사용하는 경우 .*점프라인을 제외한 모든 문자를 0번 또는 n번 의미하며,
정규식에서 사용하면 이전 문자를 0번 또는 n번 일치시킵니다.*

.*정규식의 유닉스 패턴과 동일*

find -nameUnix 모드를 사용하므로 .*모드에서 사용하면 .ANY_STRING_OR_NO_STRING링이 발견되지 않습니다.
다음을 사용하여 정규식을 사용합니다.
find -regex

대하다

관련 정보