2012-11-24 3 views
0

이 패턴 < =와 sed의 정규식이 일치하지 않습니다. 내가 정말로 필요로하는 것은 [< | < =] 중 하나를 입력하거나 일치하십시오. 나는. *과 함께 작동하도록 할 수 있지만, 나머지 라인에서 때때로 다른 문제를 일으킨다. 예 선 것이다 :'less than'또는 'lesssthan or equal to'기호와 정규식이 일치합니다.

for (int j = 0 j < nspeC++j) 

또는

for (int j = jmin j <= jmax ++j) 

다음의 (부분) 예로서 명령한다.

sed -n '/for (int *\([[:graph:]]\) *= *\([[:graph:]]\) *\1 *</p' filename 

첫 번째 패턴을 찾을 수 있지만,

sed -n '/for (int *\([[:graph:]]\) *= *\([[:graph:]]\) *\1 *<=/p' filename 

두 번째를 찾을 수 없습니다.

도움을 주시면 감사하겠습니다.

+1

무엇 유니 코드 문자에 대한 ' ≤ '? 그게 파티에서 빠져 나왔어? – Phrogz

+0

@Phrogz 어떤 프로그래밍 언어가이 유효한 소스 코드를 고려합니까? – phant0m

답변

2

문자 클래스는 하나만 문자와 일치합니다. 다른 방법

(<|<=) 또는 : 당신은 ()[]를 교체해야

(이 | 리터럴 파이프 문자가 아닌 교대로 해석됩니다 것을 의미한다) <=?는 정규식에서

1

?는 이전 요소를 만드는 optional . 따라서 <=?은 "나보다 덜주고, 당신이 가지고 있다면 같음"을 의미합니다.

나는 ? 필요가 나오지에서 탈출 여부 될 경우 확실하지 않다, 그래서 두 가지를 시도하고 나/업데이트 알려주십시오 당신은 찾을 때 :-)

+0

시도해 보니 탈출해야합니다. 그러나 <= \? <하지만 아닙니다 <=를 찾습니다. –

+0

나는 그것을 이해했다. <= \? 작동하지만 다른 곳에서 오류가 발생했습니다. s/for (int * \ ([: graph :]) * \) * = * \ ([[그래프 :]] * \) * \ 1 * <= \? * * xrange (\ 2, \ 3) /에서 1에 대해 ([[: graph :]] * \) * ++ \ 1) –