我有一个简单的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
答案 0 :(得分:1)
你的两条线都与模式匹配。
如果您只想从该行的开头匹配一个标签,则需要添加一个锚^
:
awk '/^\t: \(test/ { print $2 }' tabmatch.input
我删除了内部花括号,因为他们没有做任何有用的事情。
请记住,awk可以单独读取文件,因此您不需要使用cat将数据传输给它。