使用awk的多个分隔符

时间:2017-07-14 17:16:43

标签: bash awk

我试图解析文本文件以获取当前版本的软件。我正在寻找的字符串看起来与此类似:

" Foo bar(版本:10.2)gak"

Awk支持使用多个分隔符,我认为这是一个很好的可读解决方案。出于某种原因,这不起作用:

$ echo "Foo bar (Version: 10.2)gak" | awk -F')| ' '/Version/ {print $4}'
10.2)gak

有没有人碰巧知道正确的语法是什么?根据我在手册页中看到的内容,这应该可行。一定是在傻傻丢失。

2 个答案:

答案 0 :(得分:3)

您可以使用分隔符的字符类:

echo "Foo bar (Version: 10.2)gak" | /usr/bin/awk -F '[(): ]+' '/Version/{print $4}'
10.2

正则表达式[(): ]+正在使用一个字符类,将分隔符设置为():或空格字符中的一个或多个。

答案 1 :(得分:0)

这实际上很奇怪,因为在我的shell(这是windows的git-bash)中,你的命令正常工作:

Command Result

也许你有一个旧版本的awk表现不同。我的awk版本是:GNU Awk 4.1.4, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)

anubhava的回答也给出了相同的结果,因此,如果它也不起作用,我会试着看看你正在使用的awk的版本。