2012-12-20 104 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