일치

2012-12-01 5 views
0

가정하자 나는이 grep에서 다음 정규식 :일치

grep -E 'head \x1E tail' 

나는 그것의 개인 이스케이프 코드, \x를 사용하여 grep 비 ASCII 인식 문자를 만들 수 있습니다.

외부 프로그램을 호출하지 않고도 Bash를 사용하여 동일한 작업을 수행 할 수 있습니까?

  1. 일반 경로 확장
  2. extglob 경로 확장
  3. [[문자열 = ~ 정규식]]이 나타납니다의

없음 UTF 이스케이프 코드를 지원하지하기 : 배쉬 일치하는 정규 표현식에 대한 3 가지 모드를 제공합니다 Bash 자체도 아니다. 임의의 유니 코드를 허용하지 않는 ANSI-인용 문자열로,

$ x=éclair 
$ [[ $x =~ $'\xc3\xa9' ]] && echo matched 
matched 

참고이 문자의 UTF-8 인코딩을 지정해야합니다 : bash는

+1

엄밀히 말하면 목록의 세 번째 항목에만 정규식이 사용됩니다. – chepner

답변

1

, 당신은 ANSI-인용 문자열을 사용할 수 있습니다 전철기.

+0

비 ASCII 문자를 거부하므로 직접 내 콘솔에 예제를 삽입 할 수 없습니다. 그러나 Bash (4.2.0)는'\ x' 이스케이프를 확장하지 않는 것처럼 보입니다. 예를 들어,이 정규식은 일치하지 않습니다 : 'x = $ (echo -e '\ x1e'); regex = '\ x1e'; [$ x = ~ $ regex]] && echo matched' – davide

+0

'\ x1e '를 직접 (변수의 확장을 통과하지 않고) 삽입하면 * UTF 문자로 확장됩니다. 그건 재미 있고, 저에게 새로운 것입니다. 나는'man bash'에서 이것을 보지 못했습니다. 이것이 어떻게 부름 받았으며, 나를 참조 할 수 있습니까? – davide