AWK正则表达式中的简单空格检查不起作用

时间:2017-01-20 16:40:51

标签: regex awk

我有一个AWK脚本,它逐行浏览文件并使用它找到的内容完成各种操作,这些都可以正常工作。最近发现需要忽略一些行,所有行都遵循格式

        FOO_.....

所以我需要匹配空格FOO_。还有一些我不想匹配的行

        BAR_...  FOO_...

所以比赛需要从线开始。这一切都应该非常简单,我可以快速设置

if($0 ~ /^\s*FOO_/)
{
    continue;
}

不幸的是上面没有用。我尝试了很多检查,直到我终于能够让它工作

if($0 ~ /^ *\t*FOO_/)
{
    continue;
}

因此,由于某种原因,\s*无法正确匹配空格,但*\t*(一个或多个空格,一个或多个标签)确实有效。第二个工作意味着要匹配的所有内容都是空格或制表符,这两个都应该包含在\s下,所以我真的不确定为什么\s无效。

我可以使用其他选项,但它不理想,我只是对可能导致此问题的原因感到好奇。

2 个答案:

答案 0 :(得分:2)

\s是POSIX字符类[[:space:]]的简写,仅适用于某些awks。听起来像你使用的awk并不是其中之一。

答案 1 :(得分:2)

假设您正在使用默认字段分隔符,则可以通过检查第一个单词是否以FOO _

开头来避免此问题
if ($1 ~ /^FOO_/) {...}