awk中如何将[[和]]设置为字段分隔符/定界符?
awk设置[[、]]为字段分隔符的正确方法
错误原因
你之前写法出错的核心原因是:[]在正则中代表字符集,仅会匹配其中包含的单个字符。你将[、]都放在字符集中时,相当于只要遇到单个左/右方括号就会触发分割,自然会错误匹配单括号。
正确方案
要匹配连续两个符号的组合,需要用正则的或逻辑运算符|,分别匹配[[和]]两个完整的字符串模式即可,两种常用写法如下:
- 单引号包裹分隔符规则(推荐,无需额外处理shell转义):
命令写法:awk -F '\[\[|]]' 处理逻辑
说明:单引号中shell不会转义反斜杠,直接给awk传递正则规则\[\[|]]:其中\[转义匹配字面量左方括号,两个连续\[匹配[[;|代表或逻辑;后续的]]直接匹配两个连续右方括号(右方括号不在字符集内时不需要转义)。 - 双引号包裹分隔符规则:
命令写法:awk -F "\\[\\[|]]" 处理逻辑
说明:双引号中shell会先解析一层反斜杠转义,因此要给awk传递\[需要写两个\,最终传递到awk的正则规则和单引号场景完全一致。
效果验证
测试输入(同时包含双括号和单括号):a[[b]]c[d]e
执行命令:echo 'a[[b]]c[d]e' | awk -F '\[\[|]]' '{print $1,$2,$3}'
输出结果:a b c[d]e
可以看到单括号[d]没有被识别为分隔符,仅双括号完成了预期分割。
内容的提问来源于stack exchange,提问作者Martin R
相关产品推荐
相关产品推荐

