我是Unix的新手。
${AWK} '\!/^ / && \!/^-/ && \!/^</ && \!/^$/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt
当我像以前一样运行命令时,会在{Cygwin窗口中打印errorInfo
,如下所示:
awk: commandline:1: ^ backslash not last character on line
实际上,我的角色是将csh
翻译为bash
以进行学习。我没有写那段代码。所以,我所知道的是:
"\!/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.
我无法弄清楚哪里出错了。谁能给我一个标志?
答案 0 :(得分:3)
csh
'metasyntactic zoo'意味着!
即使在单引号内也是历史运算符,或类似的东西。在源自Bourne shell的sane ^ H ^ H ^ H ^ H shell中,!
并不是一个大问题,你可以简单地写一下:
${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
中正常运行,因为它根本不使用任何!
。