정규식 문자열 사용과 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 -name
Unix 모드를 사용하므로 .*
모드에서 사용하면 .ANY_STRING_OR_NO_STRING
링이 발견되지 않습니다.
다음을 사용하여 정규식을 사용합니다.
find -regex
대하다