免费注册 查看新帖 |

Chinaunix

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

如何把形如 A-Z_A-Z的任意多个下划线定义全部提取出来? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-11 16:54 |只看该作者 |倒序浏览
本帖最后由 bxfqing 于 2011-07-11 16:58 编辑

我现在分析一个工程的makefile文件,大概1650个左右;

想把所有的参数提取出来:
参数的格式如下:

大写字符串和数字+下划线+大写字符串数字

例如:
BUILD_PAND
BUILD_MP3_DECODER
BUILD_G722_DECODER
BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE

现在我用的脚本,使用的是tr命令,不能任意匹配带多个 下划线的参数比如说:

1_2_3_4_5_6_7
A_1_2_3_4

问题一,怎么多个匹配下划线,例如:
1_2_3_4_5_6_7
A_1_2_3_4

怎么能在一行中,挑出连续的参数来:例如:

OBJS += ctrl_iface.c ctrl_iface_$(CONFIG_CTRL_IFACE).c

只会选择出CONFIG_CTRL_IFACE
我现在是使用的是命令
tr -c -d A-Z_ 他的结果是:
OBJS____CONFIG_CTRL_IFACE
相当郁闷!!!!!!!!

论坛徽章:
0
2 [报告]
发表于 2011-07-11 17:12 |只看该作者
本帖最后由 wtuter 于 2011-07-11 18:43 编辑

回复 1# bxfqing


    awk  '/([A-Z0-9]*_[A-Z0-9]*)+/{print }'

这样?

论坛徽章:
0
3 [报告]
发表于 2011-07-11 17:22 |只看该作者
回复 2# wtuter


    awk  '/([A-Z0-9]_[A-Z0-9])+/{print }'


?? 好像不是,我还在看awk咋用

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
4 [报告]
发表于 2011-07-12 00:14 |只看该作者
回复 3# bxfqing
  1. $ echo 'OBJS += ctrl_iface.c ctrl_iface_$(CONFIG_CTRL_IFACE).c' |awk --re-interval '{match($0,/([A-Z]+_[A-Z]+){1,}/);print substr($0,RSTART,RLENGTH)}'
  2. CONFIG_CTRL_IFACE
复制代码

论坛徽章:
1
双子座
日期:2013-10-17 00:46:45
5 [报告]
发表于 2011-07-12 03:20 |只看该作者
回复 4# yinyuemi


    ss兄,请教下 --re-interval 有没有中文的翻译呢?间隔表达式?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
6 [报告]
发表于 2011-07-12 03:26 |只看该作者
回复 5# xrzs1986


    差不多,也有叫区间表达式的

论坛徽章:
0
7 [报告]
发表于 2011-07-12 09:13 |只看该作者

  1. perl -ne 'while(s/.*?([[:upper:]0-9]+(_[[:upper:]0-9]+)+)(.*)/$3/){print $1,"\n";}' makefile

复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
8 [报告]
发表于 2011-07-12 09:18 |只看该作者
  1. grep -o "[a-zA-Z0-9_]*" infile |grep "_"
复制代码

论坛徽章:
0
9 [报告]
发表于 2011-07-12 10:02 |只看该作者
回复  bxfqing
yinyuemi 发表于 2011-07-12 00:14


springwind426 发表于 2011-07-12 09:13


rdcwayx 发表于 2011-07-12 09:18



        
    谢谢各位,我先试试,再理解各位为什么这么写.
    Thanks!

论坛徽章:
0
10 [报告]
发表于 2011-07-13 16:56 |只看该作者
本帖最后由 bxfqing 于 2011-07-13 17:01 编辑

回复 4# yinyuemi

首先感谢你的方法:
我使用的是gawk:命令如下
  1. cat undocument_conditional_parameter.lst | gawk --re-interval '{match($0,/([A-Z]+_[A-Z]+){1,}/);print substr($0,RSTART,RLENGTH)}' |sort -u
复制代码
但是生成的结果怎么会有小写的呢,比如:
win_sdk
WIN_SDK_ZIP
WITH_COPYING_GC
WITH_DEADLOCK_PREDICTION
WITH_DEXPREOPT
WITH_HOST_DALVIK
WITH_HPROF
WITH_HPROF_STACK
WITH_JIT
WITH_MALLOC_LEAK_CHECK
WITH_MINGW
WITH_MONITOR_TRACKING
WITH_SEC_OMX
WPA_BUILD_SUPPLICANT
WPA_ENTERPRISE
WPA_SUPPLICANT_VERSION
x_decrypt_verify_memory


'{match($0,/([A-Z]+_[A-Z]+){1,}/);print substr($0,RSTART,RLENGTH)}'
应该只匹配大写A-Z吧?
请将suffix修改为txt,这个文件是纯文本格式
    undocument_conditional_parameter.zip (72.85 KB, 下载次数: 15)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP