Regex 匹配字段中的非空白

Regex 匹配字段中的非空白,regex,awk,Regex,Awk,在下面的数据中,我想正确区分缩进线。每行由两个字段组成,每个字段以制表符分隔,因此每个缩进行以一个不可见的制表符开始 我想知道为什么下面测试第一个字段中非空白的脚本只打印粘贴在下面的数据的第二个和第二个最后一个字段,而不是所有未缩进的行。欢迎提出解决方案的建议,但我想知道我所写的有什么问题 这是剧本 BEGIN {FS="\t"; OFS="\t"} /\s*(directors)\s*$/ {type=$1; next} $1~/\S/ {print} 数据 对空格使用posix正则

在下面的数据中,我想正确区分缩进线。每行由两个字段组成,每个字段以制表符分隔,因此每个缩进行以一个不可见的制表符开始

我想知道为什么下面测试第一个字段中非空白的脚本只打印粘贴在下面的数据的第二个和第二个最后一个字段,而不是所有未缩进的行。欢迎提出解决方案的建议,但我想知道我所写的有什么问题

这是剧本

BEGIN {FS="\t"; OFS="\t"}
  /\s*(directors)\s*$/ {type=$1; next}
  $1~/\S/ {print}
数据


对空格使用posix正则表达式属性,而不是PCRE
\s
\s

awk 'BEGIN {FS=OFS="\t"}
   /[[:space:]]*directors[[:space:]]**$/ {type=$1; next}
   $1~/[^[:space:]]/' file

注意使用
[[:space:]
而不是
\s
[^[:space:]]
而不是
\s

我将其作为awk-f脚本myfile运行,它没有打印任何内容。发布您的预期输出。另外,
\s
等都是特定于gawk的,您是否使用gawk?正如所指出的,
\s
在常规awk中只是大写的“s”,实际上您得到的结果(第二行和最后第二行)正是第一个字段中带有“s”的结果。正如@EdMorton建议的那样,我用gawk尝试了你的脚本,效果很好。我还用常规awk尝试了@anubhava的答案,效果很好。如果对你不起作用,也许可以用你根据@anubhava的答案创建的脚本文件的内容来更新你的问题。@Ed Morton。我刚刚意识到我最近更换了机器,man-awk显示我正在运行mawk。我已经在新机器上安装了gawk,脚本现在运行不变,一切正常。
awk 'BEGIN {FS=OFS="\t"}
   /[[:space:]]*directors[[:space:]]**$/ {type=$1; next}
   $1~/[^[:space:]]/' file