为什么awk字段分隔符不能用于\ s?

时间:2014-10-17 02:31:11

标签: awk field

我运行这样的命令:

echo "aaa bbb  ccc    dddd" | awk -F "\\s+" '{print $1,$2}'

预期输出为aaa bbb

但实际上,现场分离器不起作用!

为什么呢?可以请任何人帮忙吗?

2 个答案:

答案 0 :(得分:1)

因为awk将字段分隔符值\\s视为普通s。你需要再次逃避它,以便它告诉awk它不是普通的s,它是一个特殊的元字符,它匹配所有的空格。

$ echo "aaa bbb  ccc    dddd" | awk -F "\\\s+" '{print $1,$2}'
aaa bbb

答案 1 :(得分:0)

在这种情况下,绝对不需要调整字段分隔符,因为默认情况下完全符合您的要求:

echo "aaa bbb  ccc    dddd" | awk '{print $1,$2}'

将为您提供所需的输出。

\s字符类仅在某些较新版本的awk中可用。如果您在其他上下文中发现需要它,则可以使用POSIX [[:space:]]字符类。或者,如果您只想匹配一个或多个空格()字符,则可以使用+(单个空格后跟一个加号)。