가능한 일치 항목을 찾으려고 노력 중입니다.
ex****e
그렇다면 ex로 시작하고 e로 끝나며 그 사이에 4개의 문자가 있는 항목은 어떻게 해야 할까요?
답변1
단일 문자와 일치하는 정규식 연산자는 입니다 .
. 이는 ?
셸의 와일드카드와 유사합니다. *
자체는 정규식의 이전 콘텐츠 수에 관계없이(예: s(0 포함) a*
수에 관계 없음 a
) 및 셸 와일드카드의 문자 수와 일치합니다.
POSIXly에서 x
e와 정확히 일치하는 줄을 찾으세요.
grep -xE 'ex.{4}e'
또는:
grep -x ex....e
또는:
grep -x 'ex.\{4\}e'
두 번째는 가장 휴대성이 좋은 것입니다. grep '^ex....e$'
이는 Unix 버전 4(1973)의 원래 구현에서도 작동하지만 -x
Unix 버전 7(1979)에 추가되어 이제 일반화되었으므로 신뢰할 수 있습니다.
egrep
V7에는 확장 정규식도 추가되었지만 처음에는 {x,y}
간격 연산자가 없었습니다. 이 연산자가 \{x,y\}
추가되었지만 이전 버전과의 호환성이 손상될 수 있으므로 grep
일반적으로 추가되지 않습니다 . egrep
그러나 90년대 초반에 POSIX는 -E
기능을 병합하고 지원을 요구하는 옵션을 도입했지만 이제는 더 이상 사용되지 않습니다.grep
egrep
grep
{x,y}
egrep
그러나 여전히 가끔 grep
지원되지 않는 구현 -E
이나 Solaris와 같은 지원 egrep
되지 않는 구현 (대신 사용해야 함 )을 발견할 수 있습니다.{x,y}
/bin/grep
/bin/egrep
/usr/xpg4/bin/grep
일부 grep
구현에서는 멀티바이트를 지원하지 않으며 해당 .
정규식 연산자는 멀티바이트 문자(예: 비ASCII UTF-8 문자)의 모든 바이트와 일치할 수 있습니다.
$ $ locale charmap
UTF-8
$ echo extrême | busybox grep -x ex....e
$ echo extrême | gnu-grep -x ex....e
extrême
$ echo extrême | busybox grep -x ex.....e
extrême
ê 문자는 UTF-8에서 2바이트로 구성되므로 extrême
7자이지만 8바이트입니다.
$ printf %s extrême | wc -cm
7 8
답변2
다음 정규식을 사용하십시오.
^ex.{4}e$
전임자:
$ grep -E '^ex.{4}e$' <<< 'ex****e'
또는
$ grep '^ex.\{4\}e$' <<< 'ex****e'
산출:
ex****e
답변3
@stéphane-chazelas가 제안한 기본 패턴:
grep -xE 'ex.{4}e'
@gilles-quenot의 제안과 동일하게 '-x' 스위치로 인해 공백 없이 'e', 'x', 임의의 4개 문자 및 'e'로만 구성된 행을 찾습니다.
grep -E ^ex.{4}e$
그러나 OP는 일치하지 않는 콘텐츠와 일치하는 콘텐츠가 있는 줄을 가질 수 있도록 "ex로 시작하고 e로 끝나며 그 사이에 4개의 문자가 있는 모든 것"을 원합니다. 이것을 얻으려면 다음 패턴이 필요합니다.
grep -E 'ex.{4}e'
따옴표는 쉘 브래킷 확장을 방지합니다.