2012-12-14 2 views
1

저는 상점에서 라우터를 사용하면서 TCL로 작업하기 시작했습니다. 우리에게는 내가 접근 할 수있는 스크립트를 작성하는 기술자가있어서 그의 작품을 통해 배우려고합니다.정규 표현식을 사용하여 기존 TCL 스크립트의 일부를 이해하려고 시도했습니다.

내가 이해하려고 노력한 스크립트의 시작 부분에서 다음 섹션을 보았고 거의 진행되지 않았습니다. 나는 당신이 어떤 설명이라도 전혀 도울 수 있기를 바랬다.

이 섹션에서는 프롬프트를 설정하고 나중에 스크립트에서 사용되는 프롬프트 설정을 만듭니다.

set cmd "show clock" 
regsub -all $spec $cmd "_" cmde 

그래서 내가 정말 무슨 일이 일어나고하지만 내 '웹 푸'이에 날 완전히 실패 무엇인지 알고 싶습니다 다음과 같이

set prompt "(%|#|\\$) $"  ;# default prompt 
catch {set prompt $env(EXPECT_PROMPT)} 
set spec "(,|%|\\)|\\(|;|:|\\.|\\*|\[|\]| |/|{|}|\\||\\$|\"|\'|\\\\|-)" 

은 나중에, 변수 사양의 값이 사용됩니다.

감사합니다. Marc

답변

2

regsub 명령은 "특수"문자 집합을 밑줄로 변환합니다. spec 정규식 이해하기 쉬울 (그리고 쉽게 읽을 수)이 같은 수 있습니다

set spec {[][,%)(;:.* /{}|$"'\\-]} 

괄호, 쉼표, 퍼센트, 괄호, 세미콜론, 콜론, 도트, 별, 공간, 슬래시, 괄호, 파이프, 달러 , 작은 따옴표, 작은 따옴표, 작은 따옴표, 백 슬래시, 하이픈 - (문자 클래스에 대괄호를 쓰려면 닫는 괄호를 첫 번째 문자로 사용해야합니다.)

조금 외삽 영숫자가 아닌 문자를 모두 밑줄로 변경하려면

regsub -all {\W} $cmd "_" cmde 

if {[info exists env(EXPECT_PROMPT)]} { 
    set prompt $env(EXPECT_PROMPT) 
} else { 
    set prompt {[%#$] $} 
} 

당신 경우 :

\W 는 "비 단어 문자"

http://tcl.tk/man/tcl8.5/TclCmd/re_syntax.htm

프롬프트 변수를 설정하는 또 다른 방법은, 내가 그것을 쓸 것입니다 방법에 대한 정규 표현식 속기 Tcl을 배우고, Tcl Tutorial을 사용하십시오.

+0

먼저 답장을 보내 주셔서 감사합니다. 둘째, 이렇게 읽기 쉬운 방법으로 수행 할 수 있기 때문에 모든 원래 작성자의 코드는 무엇을 의미합니까 ?? 나 같은 사람에게는 기괴 해 보입니다. – Marc

+0

정규 표현식 파이프 기호'| '는 "이 표현식 또는 해당 표현식과 일치"(http://tcl.tk/man/tcl8.5/TclCmd/re_syntax.htm 참조)를 의미하므로 작성자가 쉼표와 짝을 이루었습니다 또는 % 또는 닫는 괄호 또는 ... ". 각 대안은 단일 문자이기 때문에 문자 클래스가 더 적합한 컨테이너입니다. 또한 저자는 분명히 Tcl의 괄호'{}'메커니즘을 인용하지 않았기 때문에 꽤 많은 백 시라시스가 있습니다. –

+0

다시 한 번 감사드립니다. – Marc

관련 문제