+ -
当前位置:首页 → 问答吧 → awk取值,求解...

awk取值,求解...

时间:2011-06-30

来源:互联网

需要处理一组文本,特征是:
每行都有两个或者三个括号包含的字符,(xyz),现在需要取出第三个括号中的内容(不包含括号)。
内容类似:

(ntp):x:38:38::(/etc/ntp):/sbin/nolo(gingdm:/sbin/)nologin
(gdm):x:42:42:(gdmuser):/var/(abcd1234)login

取出:
gdm:/sbin/
abcd1234

我要处理的文本中是没有特殊符号的,这个只是用passwd模板的时候借用了一下,不知道有特殊符号怎么处理?
不知道awk怎么取出两个不同符号中间的内容呢?

求解。。。

作者: beacon1024   发布时间: 2011-06-30

awk -F'[)(]' '{print $(NF-1)}' urfile
sed 's/.*(\(.*\)).*/\1/' urfile

作者: ly5066113   发布时间: 2011-06-30

本帖最后由 zooyo 于 2011-06-30 13:18 编辑
  1. sed 's/.*(\(.*\))[^(]*/\1/' file
  2. gingdm:/sbin/
  3. abcd1234
复制代码

作者: zooyo   发布时间: 2011-06-30



QUOTE:
awk -F'[)(]' '{print $(NF-1)}' urfile
sed 's/.*(\(.*\)).*/\1/' urfile
ly5066113 发表于 2011-06-30 13:13




#awk -F'[)(]' '{print $(NF-1)}'  urfile
gingdm:/sbin/
abcd1234
awk: cmd. line:1: (FILENAME=urfile FNR=3) fatal: attempt to access field -1
这个运行起来有点问题, $(NF-1)不能运算吗?
不过这个很厉害,原来-F[xyz]可以包含很多种分隔符。



sed 's/.*(\(.*\)).*/\1/' urfile

sed还没仔细看,不知道 \1是什么意思呢?换成\2是运行不了的,\0是所有记录


谢谢!

作者: beacon1024   发布时间: 2011-06-30

本帖最后由 yinyuemi 于 2011-06-30 13:48 编辑

回复 beacon1024


可能和你数据有关系:
改下:

awk -F'[)(]' 'NF>1{print $(NF-1)}'  urfile

作者: yinyuemi   发布时间: 2011-06-30