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



我有一个AWK脚本,它逐行遍历文件,并用它找到的内容做各种事情,这些都很好。最近发现一些行需要忽略,这些行都遵循格式

FOO_.....

所以我需要匹配空白FOO_。还有一些行,我不想匹配去

BAR_...  FOO_...

所以这场比赛需要先发。这一切都应该很容易,我很快就设置好了

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

不幸的是,上述方法没有奏效。我尝试了很多检查,直到我最终能够让工作

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

因此,由于某些原因,s*无法正确匹配空白,但*t*(一个或多个空格、一个或更多个选项卡)确实有效。第二个工作意味着所有匹配的东西要么是空格,要么是选项卡,这两者都应该包含在s中,所以我真的不确定s为什么不工作。

我可以让它与其他选项一起工作,但这并不理想,我只是好奇是什么导致了这个问题。

s是POSIX字符类[[:space:]]的简写,它只能在某些awk中工作。听起来你使用的awk不是其中之一。

假设您使用默认的字段分隔符,您可以通过检查第一个单词是否以FOO_开头来避免这个问题

if ($1 ~ /^FOO_/) {...}

最新更新