其实这个问题应该是shell解析hard quote的问题,只是今天拿awk举例所以归类到awk分类里。
cat file :
['root'] administrator
要求匹配到 ['root'] 内容的打印后面的值,按照常规思路我们这样写:
- awk '/\[\'root\']/{print $2}' file
- >
很明显是无法成功的,我们来剖析一下为什么,shell中对quote的匹配是成对的,那么这个命令我们可以理解为这样:'/\[\' #匹配了一对单引号,第一个单引号必须是单引号,第二个转义和不转义都能匹配。
root
\']/{print $2}' #这里红色的单引号被转义为普通字符,绿色的单引号只有一个,无法匹配到一对。
既然知道了问题所在,那么就把单引号成对修正即可:
'/\[' #红色部分的单引号是我们自己添加的,这样保证了shell解析后传递给awk程序
\'root\' 数据的完成性,又使shell能正确的解析hard quote。
']/{print $2}'
那么完成的命令为:
- awk '/\['\'root\'']/{print $2}' file
阅读(5177) | 评论(0) | 转发(2) |