2012-12-20 4 views
1

저는 Unix에 익숙하지 않습니다. 내가 전에 같이 명령을 실행하면awk 스크립트와 백 슬래시

${AWK} '\!/^/&& \!/^-/ && \!/^</ && \!/^$/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt 

, 다음과 같이 Cygwin에서 창에 인쇄 errorInfo있다 :

awk: commandline:1:^backslash not last character on line 

사실, 내 역할은 학습 bashcsh 번역입니다. 나는 그 코드를 작성하지 않았다. 그래서, 내가 아는 것은 :

"\!/regex/" : is a model unit."\" is belong to the awk synax for cut down the long sentence 
"!"means logical NOT,"/regex/" means one model.btw,"&&" means logical AND. 

어디서 잘못되었는지 알 수 없습니다. 아무도 내게 사인을 줄 수 있습니까?

+1

'!'s를 이스케이프 할 필요없이'\! '대신'!'만 사용하십시오 – perreal

+0

네 !! 맞습니다! – fanshaoer

답변

3

csh 'metasyntactic zoo'는 !이 작은 따옴표 나 그와 유사한 내역 연산자이기도 함을 의미합니다. 제정신에서^H^H^H^Bourne 쉘에서 파생 된 H 껍질의 !은 큰 문제가되지 않습니다, 당신은 간단하게 작성할 수 있습니다

${AWK} '!/^/&& !/^-/ && !/^</ && !/^$/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt 

는 물론, 즉 더 여전히 단순화 할 수 있습니다

빈 줄, 대시 또는 이하 (빈 줄이 아님) 이외의 다른 줄이 오는 줄을 찾습니다.

(그러나 적어도 하나 개의 문자를 포함해야하며, 빈 대시 또는 이하가 아닌 다른 문자로 시작하는 라인을 찾습니다
${AWK} '/^[^- <]/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt 

, 그래서 빈 줄은 다음과 같습니다 즉 너무 부정 문자 클래스를 사용하여 단순화 할 수있다 자동 제외됨). 그리고 마지막 버전은 심지어 !을 전혀 사용하지 않기 때문에 csh에서 OK 일 수도 있습니다.

+0

: 도움과 자세한 설명을 해주셔서 감사합니다! 매우 도움이됩니다! 그리고 메리 chiristmas! – fanshaoer