Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3031752
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2012-11-02 16:12:35

    其实这个问题应该是shell解析hard quote的问题,只是今天拿awk举例所以归类到awk分类里。

cat file :
['root'] administrator

要求匹配到 ['root'] 内容的打印后面的值,按照常规思路我们这样写:

  1. awk '/\[\'root\']/{print $2}' file
  2. >
很明显是无法成功的,我们来剖析一下为什么,shell中对quote的匹配是成对的,那么这个命令我们可以理解为这样:
'/\[\'               #匹配了一对单引号,第一个单引号必须是单引号,第二个转义和不转义都能匹配。
root
\']/{print $2}'     #这里红色的单引号被转义为普通字符,绿色的单引号只有一个,无法匹配到一对。


既然知道了问题所在,那么就把单引号成对修正即可:
'/\['                #红色部分的单引号是我们自己添加的,这样保证了shell解析后传递给awk程序
\'root\'             数据的完成性,又使shell能正确的解析hard quote。
']/{print $2}'

那么完成的命令为:

  1. awk '/\['\'root\'']/{print $2}' file





阅读(5192) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~