免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4051 | 回复: 8
打印 上一主题 下一主题

请教字符串匹配和awk获取shell变量值的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-13 10:39 |只看该作者 |倒序浏览
本帖最后由 dickgz1z 于 2010-06-13 11:01 编辑

1)=====1.txt
aawww:cc:uuvvvmmmiiaaaaccc:ttto
www:cc:uuaaaabbbnnn:ttto
kkkk:cc:uuaaaacccdddnnn:ttto
aawww:cc:uuvvvmmmiiccc:ttto
kkkk:cc:aaaaccooooocdddnnn:ttto:ppppp

像上面这一段文本,我用一条awk命令:
  1. awk -F":" '$3~/[uu*mm*cc]/{print}' 1.txt
复制代码
想获取这几行:
aawww:cc:uuvvvmmmiiaaaaccc:ttto
aawww:cc:uuvvvmmmiiccc:ttto

但是打印结果却是:
aawww:cc:uuvvvmmmiiaaaaccc:ttto
www:cc:uuaaaabbbnnn:ttto
kkkk:cc:uuaaaacccdddnnn:ttto
aawww:cc:uuvvvmmmiiccc:tttoo
kkkk:cc:aaaaccooooocdddnnn:tttoo:ppppp

全部输出。似乎它连带匹配了uu*或mm*或*cc的情况,但这并不是我的本意。请问怎样写命令才能得到想要的结果?

2)另外如果我把代码独立出来到一个shell文件,并将变量提取出来,如下:
======1.sh
  1. #!/bin/sh
  2. UU="uu"
  3. MM="mm"
  4. CC="cc"
  5. awk -F":" '$3~/[$UU*$MM*$CC]/{print}' 1.txt
复制代码
执行这个shell脚本却没有输出.


在awk里面怎么获取shell的字符串变量值呢?

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2010-06-13 10:48 |只看该作者
  1. #!/bin/sh

  2. UU="uu"
  3. MM="mm"
  4. CC="cc"

  5. awk -F ":" "\$3~/$UU.*$MM.*$CC/" 1.txt
复制代码

论坛徽章:
0
3 [报告]
发表于 2010-06-13 10:59 |只看该作者
awk -F":" '$3~/u+[^u]+m+[^m]+c+/{print $0}'

论坛徽章:
0
4 [报告]
发表于 2010-06-13 11:02 |只看该作者
本帖最后由 dickgz1z 于 2010-06-13 11:05 编辑
ly5066113 发表于 2010-06-13 10:48


我刚才定义变量时是打错了.谢谢,你的写法可行.

论坛徽章:
0
5 [报告]
发表于 2010-06-13 11:18 |只看该作者
awk -F":" '$3~/u+[^u]+m+[^m]+c+/{print $0}'
jiean 发表于 2010-06-13 10:59


谢谢,就是这样写了!!

论坛徽章:
0
6 [报告]
发表于 2010-06-14 16:41 |只看该作者
sed -n '/u\+v\+/p' linux.166

论坛徽章:
0
7 [报告]
发表于 2010-06-14 20:02 |只看该作者
sed -n '/u\+v\+/p' linux.166
iori809 发表于 2010-06-14 16:41



    u\+v\+
这个正则表达式表示什么意思?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
8 [报告]
发表于 2010-06-14 20:21 |只看该作者
回复 7# ccsjx


u\+表示u出现1次或多次
v\+表示v出现1次或多次

论坛徽章:
0
9 [报告]
发表于 2010-06-14 20:30 |只看该作者
回复 8# Shell_HAT


    我知道了。因为没有加-r选项,不支持扩展正则,所以要用"\'。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP