awk regexp仅在一个选项卡上匹配

时间:2016-10-11 08:01:48

标签: awk

我有一个简单的awk输入文件,名为tabmatch.input,内容如下:

        : (test1
            : (test2

第一行有一个标签,然后是":",第二行有两个标签,然后是":"。 单词" test1"和" test2"可能是我试图解析的真实文件中的任何单词。

我正在尝试创建一个与第一行匹配的正则表达式,但不是第二行。 例如,我试试这个:

user@lab-client:~$ cat tabmatch.input |awk '/\t: \(test/ {  {print $2} }'
(test1
(test2

即使只指定一个\ t然后指定":#34;它仍然匹配两个\ t和":"。 如果我匹配两个\ t它只匹配第二行有两个\ t。

user@lab-client:~$ cat tabmatch.input |awk '/\t\t: \(test/ {  {print $2} }'
(test2

我环顾四周但没找到为什么\ t匹配几个\ t,或者如何使它只匹配一个。

我做的其他尝试是:

user@lab-client:~$ cat tabmatch.input |awk '/[\t]: \(test/ {  {print $2} }'
(test1
(test2

user@lab-client:~$ cat tabmatch.input |awk '/[\t]?: \(test/ {  {print $2} }'
(test1
(test2

1 个答案:

答案 0 :(得分:1)

你的两条线都与模式匹配。

如果您只想从该行的开头匹配一个标签,则需要添加一个锚^

awk '/^\t: \(test/ { print $2 }' tabmatch.input

我删除了内部花括号,因为他们没有做任何有用的事情。

请记住,awk可以单独读取文件,因此您不需要使用cat将数据传输给它。