2012-12-20 106 views
1

我是Unix的新手。awk腳本和反斜槓

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

當我之前運行的命令一樣,有errorInfo打印到Cygwin的窗口如下:

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

其實,我的角色是學習翻譯cshbash。我沒有寫這個代碼。所以,我知道的是:

"\!/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

yes !!你是對的!它的工作! – fanshaoer

回答

3

csh'metasyntactic動物園'意味着!是一個歷史運算符,甚至在單引號內,或類似的東西。在健全的^ H^H^H ^從Bourne shell中得到的^ h多發炮彈,!是沒有這麼大的問題,你可以簡單的寫:

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

當然,這還可以進一步簡化爲:

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

這樣查找行的開頭,後面跟空白,短劃線或小於(不是空行)之外的內容。

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

這看起來用於啓動具有比空白,破折號或小於其他字符的行(但它必須包含至少一個字符,所以空行是:太可以通過使用否定的字符類被簡化自動排除)。而且最後一個版本甚至可以在csh中正常工作,因爲它根本不使用任何!

+0

:謝謝你的幫助和詳細的解釋!!它是如此的有用!快樂的chiristmas! – fanshaoer