awk:警告:转义序列`\]'被视为普通的`]'

时间:2014-09-16 11:02:24

标签: awk

echo "A:\ B:\ C:\ D:\" | awk -F'[:\]' '{print $1}'

输出:

awk: warning: escape sequence `\]' treated as plain `]'

A

我收到了上述警告信息,我尝试了多种选项来逃避],但这并没有解决。

我想同时使用分隔符:\并通过打印A精确打印字母BCD$1$2$3$4

2 个答案:

答案 0 :(得分:7)

我认为这是你正在尝试做的事情:

$ echo 'A:\ B:\ C:\ D:\' | awk -F':\\\\[[:space:]]*' '{print $2}'
B

请注意,我添加了[[:space:]]*,因为我认为您不希望$1之后的字段中有前导空格。

FS设置中使用的字符串文字会被解析两次,一次在脚本被读取时再次被执行,因此转义需要加倍(google it和/或阅读awk手册页或书) 。在这种情况下,第一次传递\\\\转换为\\,第二次传递\\转换为\,这就是您想要的。

答案 1 :(得分:0)

这也是错误的:

echo "A:\ B:\ C:\ D:\"

您正在转义"并且它会中断输入,您需要删除它或使用单引号。

awk不喜欢字段分隔符中的单个\,因此请尝试:

echo 'A:\ B:\ C:\ D:\' | awk -F":|\\" '{print $1}'
A

或者你可以逃避它(单引号):

echo 'A:\ B:\ C:\ D:\' | awk -F'[:\\\\]' '{print $1}'
A

甚至更多逃避(双引号):

echo 'A:\ B:\ C:\ D:\' | awk -F"[:\\\\\\\]" '{print $1}'
A