我有一个AWK脚本,它逐行浏览文件并使用它找到的内容完成各种操作,这些都可以正常工作。最近发现需要忽略一些行,所有行都遵循格式
FOO_.....
所以我需要匹配空格FOO_
。还有一些我不想匹配的行
BAR_... FOO_...
所以比赛需要从线开始。这一切都应该非常简单,我可以快速设置
if($0 ~ /^\s*FOO_/)
{
continue;
}
不幸的是上面没有用。我尝试了很多检查,直到我终于能够让它工作
if($0 ~ /^ *\t*FOO_/)
{
continue;
}
因此,由于某种原因,\s*
无法正确匹配空格,但*\t*
(一个或多个空格,一个或多个标签)确实有效。第二个工作意味着要匹配的所有内容都是空格或制表符,这两个都应该包含在\s
下,所以我真的不确定为什么\s
无效。
我可以使用其他选项,但它不理想,我只是对可能导致此问题的原因感到好奇。
答案 0 :(得分:2)
\s
是POSIX字符类[[:space:]]
的简写,仅适用于某些awks。听起来像你使用的awk并不是其中之一。
答案 1 :(得分:2)
假设您正在使用默认字段分隔符,则可以通过检查第一个单词是否以FOO _
开头来避免此问题if ($1 ~ /^FOO_/) {...}