Chinaunix首页 | 论坛 | 博客
  • 博客访问: 566118
  • 博文数量: 375
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-20 10:21
文章分类

全部博文(375)

文章存档

2015年(1)

2014年(374)

分类: LINUX

2014-08-18 14:01:15

原文地址:awk之单引号详解 作者:zooyo

    其实这个问题应该是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





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