-
예를 들어 파일 이름에 하이픈이 있는 파일을 식별하려면 정규식과 결합된 명령이 일치하지 않는 것 같습니다 test-19.1.txt
.find
명령이 find . -maxdepth 1 -regextype posix-egrep -regex '.*/[a-z0-9\-\.]+\.txt' -exec echo {} \;
bash 쉘에서 실행되었지만 해당 파일을 찾을 수 없습니다. 파일 이름에서 하이픈이 제거되면 정규식이 일치합니다.
테스트할 때 동일한 정규식을 사용하세요.regexr.com성공했습니다.
답변1
문자 클래스에 하이픈을 포함하려면 하이픈이 첫 번째 또는 마지막 위치에 있어야 합니다.
~에서매뉴얼 찾기 "GNU Emacs에서 사용되는 것과 거의 동일한 정규식 유형을 찾고 찾습니다."그리고로부터이맥스 매뉴얼:
[ ... ]
- 을 포함하려면 그룹의 첫 번째 또는 마지막 문자로
‘-’
쓰거나‘-’
범위 뒤에 배치하세요. 따라서‘[]-]’
일치하는‘]’
및‘-’
.
따라서 정규 표현식은 다음과 같아야 합니다.'.*/[a-z0-9.-]+\.txt'
POSIX BRE 및 ERE에서는 동일한 규칙이 적용됩니다.
<hyphen-minus>
문자는 목록에서 처음(있는 경우 첫 문자 다음) 또는 마지막에 나타나는 경우 그 자체로 처리되거나 범위 표현식의 끝 범위 지점으로 처리됩니다.'^'
예를 들어, 표현식"[-ac]"
은"[ac-]"
동일하며'a'
,'c'
또는'-'
; 및 를 제외한 모든 문자와 일치합니다. 표현식은 및 사이의 모든 문자와"[^-ac]"
일치합니다 ."[^ac-]"
POSIX 로케일에서 해당 문자가 기호 뒤에 오기 때문에 유효하거나 동등합니다. a를 시작 범위 지점으로 사용하려면 대괄호 표현식에서 먼저 나오거나 조합 기호로 지정되어야 합니다. 예를 들어 a 또는 모든 문자 또는 0과 0(0 포함) 사이에서 정렬하는 정렬 요소와 일치합니다.'a'
'c'
'-'
"[%--]"
'%'
'-'
"[--@]"
'-'
'@'
"[a--@]"
'@'
'a'
'-'
<hyphen-minus>
"[][.-.]-0]"
<right-square-bracket>
<hyphen-minus>
대괄호 표현식이
'-'
및 를 모두 지정하는 경우 대괄호 표현식에서 첫 번째(있는 경우) 및 마지막에']'
배치']'
되어야 합니다 .'^'
'-'
실제로 대부분의 정규식 변형에는 하이픈 일치 규칙이 동일합니다.
하이픈은 여는 괄호 바로 뒤, 닫는 괄호 앞 또는 부정된 캐럿 뒤에 올 수 있습니다.
[-x]
둘 다[x-]
x 또는 하이픈과 일치합니다. x나 하이픈이 아닌 모든 문자[^-x]
와 일치합니다.[^x-]
이는 이 튜토리얼에서 설명하는 모든 스타일에 적용됩니다.범위를 형성할 수 없는 문자 클래스의 다른 위치에 있는 하이픈은 리터럴이나 오류로 해석될 수 있습니다. 정규식 스타일은 이것과 매우 일치하지 않습니다.
답변2
노력하다;
find . -maxdepth 1 -regextype posix-egrep -regex '.*/[a-z0-9.-]+\.txt'
대괄호 표현식 내에서:
- 대시에는 특별한 의미가 있습니다.범위. 이 특별한 의미는 대시가 시작 부분(선택 사항인
^
경우 사용된 경우 다음)이나 끝에 있는 경우에만 피할 수 있습니다. - 일반적으로 백슬래시는 다음 문자를 이스케이프하지 않으며 리터럴입니다
\
. 특히: 이스케이프 포인트가 필요하지 않으며-
백슬래시를 사용하여 대시( )의 특별한 의미를 이스케이프할 수 있는 방법이 없습니다 .
[a-z0-9\-\.]
따라서 귀하가 작성하는 내용은 ~(또는 단지) 범위 로 이해됩니다 .\
\
\