匹配字段中的非空格

时间:2015-02-28 17:22:01

标签: regex awk

在下面的数据中,我想正确区分缩进的行。每行包含2个以制表符分隔的字段,因此每个缩进行以不可见的制表符开头。

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

这是脚本

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

数据。

directors
&Oumlzkul, Ahmet Salih  Ii 2013
'Abd Al-Hamid, Ja'far   A Two Hour Delay 2001
    Badgeless sur la Croisette 2012
    Just Outside the Frame: The Profilmic Event and Beyond 2008
    Mesocafe 2009
    Mesocafé 2011
'D.J'Arlia, Domenic She'll Never Know 2012
    Cantarella 2011
    Makhno Beer 2010
'Kid Niagara' Kallet, Harry Drug Demon Romance 2012
'Kusare, Mak (I)    Baby Beautiful 2013/II
    Comrade 2008
'Kusare, Mak (II)   A Play Called a Temple Made of Clay 2014
'Legend' Spivey, Larry  The Crime City Diaries: Entry 1 - Crooked 2012
'Noble Julz'Hamilton, Ulia  Church Hurt 2015

1 个答案:

答案 0 :(得分:2)

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

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

请注意使用[[:space:]]代替\s[^[:space:]]代替\S