1

我是 Unix 的新手。

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

当我像以前一样运行命令时,errorInfoCygwin 窗口中打印如下:

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.

我只是不知道哪里错了。任何人都可以给我一个标志吗?

4

1 回答 1

3

csh元语法动物园”意味着!即使在单引号或类似的东西内也是历史运算符。在从 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因为它根本不使用任何东西!

于 2012-12-20T05:52:51.820 回答