sed -e 's/\(.*\)\.\w/\1.o/'

怎么理解这个命令?\(.*\)\.\w这个又是什么意思?来自如下代码

$(obj).depend:  $(src)Makefile $(TOPDIR)/config.mk $(SRCS) $(HOSTSRCS)

                @rm -f $@
                @for f in $(SRCS); do \
                        g=`basename $f | sed -e 's/\(.*\)\.\w/\1.o/'`; \
                        $(CC) -M $(CPPFLAGS) -MQ $(obj)$g $f >> $@ ; \

                done



.*表示任意多个字符;
\(.*\)是用来做后向引用的,\1就是它了;
\.是一个点
\w用于匹配字母,数字或下划线字符;

作用:把文件扩展名的首个字符替换成o
比如有一个文件叫做test.log,文件名会被替换成test.oog

所有.c  和 .cpp 对应的.o
把命令拿出来 在shell里运行下就知道了
将以一个字符或数字为后缀的文件名该为以o为后缀的文件名
正则表达式使用详解
http://bbs.chinaunix.net/thread-63273-1-1.html

Regular Expression 简介
http://bbs.chinaunix.net/thread-605570-1-1.html

Regular Expression POSIX Extension
http://bbs.chinaunix.net/viewthread.php?tid=1617693#pid11506403

请教一下,有个疑问,\(.*\) 这段,\)的不是屏蔽掉元字符么?也就是说\(就是匹配(了,那么\(.*\) 应该匹配以 ( 开头并且以 ) 结尾,中间是字符的文件名啊?
明白了,sed默认不支持扩展的正则表达式,所以()不是元字符。加上-r选项才支持扩展正则





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值