求助,懂正则表达式的看看,谢谢

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
win1naruto
帖子: 31
注册时间: 2011-04-01 18:20

求助,懂正则表达式的看看,谢谢

#1

帖子 win1naruto » 2014-03-06 15:45

我很多文件,用正则表达式 :
git add *.[ch],
就是增加了所有的c和h文件,但是,要除去b.h,这个正则式怎么写 ?
头像
lainme
论坛版主
帖子: 7805
注册时间: 2008-09-13 19:17
系统: Arch Linux (x86_64)
联系:

Re: 求助,懂正则表达式的看看,谢谢

#2

帖子 lainme » 2014-03-06 15:55

http://stackoverflow.com/questions/2643 ... l-globbing

git add 后面应该是glob。另外,可以用gitignore的
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: 求助,懂正则表达式的看看,谢谢

#3

帖子 cao627 » 2014-03-06 18:39

所有的c和h文件,但是,要除去b.h
这个要求不能用shell文件名扩展一次实现:
比如可以这样 !(b).[ch] 但这样就会连b.c也会被排除了

不如这样 :

代码: 全选

git add `ls *.[ch] | grep  -v 'b\.h'`
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 求助,懂正则表达式的看看,谢谢

#4

帖子 susbarbatus » 2014-03-07 9:47

cao627 写了:
所有的c和h文件,但是,要除去b.h
这个要求不能用shell文件名扩展一次实现:
比如可以这样 !(b).[ch] 但这样就会连b.c也会被排除了

不如这样 :

代码: 全选

git add `ls *.[ch] | grep  -v 'b\.h'`
.... 你不会直接 !(b).h 么……

*.c !(b).h 这样就好了
沉迷将棋中……
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: 求助,懂正则表达式的看看,谢谢

#5

帖子 cao627 » 2014-03-07 11:19

也是啊!

@susbarbatus
win1naruto
帖子: 31
注册时间: 2011-04-01 18:20

Re: 求助,懂正则表达式的看看,谢谢

#6

帖子 win1naruto » 2014-03-11 17:16

susbarbatus 写了:
cao627 写了:
所有的c和h文件,但是,要除去b.h
这个要求不能用shell文件名扩展一次实现:
比如可以这样 !(b).[ch] 但这样就会连b.c也会被排除了

不如这样 :

代码: 全选

git add `ls *.[ch] | grep  -v 'b\.h'`
.... 你不会直接 !(b).h 么……

*.c !(b).h 这样就好了
好像不行啊..
git add !(b).[ch]

fatal:pathspec "!(b).[ch]" didn't match any files
sdzzg
帖子: 327
注册时间: 2008-05-30 16:22

Re: 求助,懂正则表达式的看看,谢谢

#7

帖子 sdzzg » 2014-03-11 21:32

[^b].[ch]
sdzzg
帖子: 327
注册时间: 2008-05-30 16:22

Re: 求助,懂正则表达式的看看,谢谢

#8

帖子 sdzzg » 2014-03-11 21:35

我理解错了,请自动忽略
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: 求助,懂正则表达式的看看,谢谢

#9

帖子 cao627 » 2014-03-11 21:59

好像不行啊..
git add !(b).[ch]

fatal:pathspec "!(b).[ch]" didn't match any files
你用是什么shell?
只在bash上测试过 !(x)这种用法
如果你的shell是bash
先执行:
shopt -s extglob
试试


@ win1naruto
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求助,懂正则表达式的看看,谢谢

#10

帖子 eexpress » 2014-03-12 9:33

这哪里是正则哦。这是bash的扩展性能。
● 鸣学
头像
温习江湖
帖子: 580
注册时间: 2012-06-06 18:20

Re: 求助,懂正则表达式的看看,谢谢

#11

帖子 温习江湖 » 2014-03-12 17:26

正则中的环视,(?<!b)\.[ch]
当然,用在这里没用。

把b.h添加进gitignore
Vimwiki建的小博客 wweir.org

历史的车轮压过一切,任何人或事物都留在了车辙里,只有思想和智慧或附在车辄上走上那么一段时间
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: 求助,懂正则表达式的看看,谢谢

#12

帖子 cao627 » 2014-03-12 20:19

正则中的环视,(?<!b)\.[ch]
单从正则的角度讲,这会把 b.c和b.h都过滤掉的。
而且也会把 xb.h 这样类型的也会过滤掉,但搂主只要过滤b.h
头像
温习江湖
帖子: 580
注册时间: 2012-06-06 18:20

Re: 求助,懂正则表达式的看看,谢谢

#13

帖子 温习江湖 » 2014-03-14 8:40

cao627 写了:
正则中的环视,(?<!b)\.[ch]
单从正则的角度讲,这会把 b.c和b.h都过滤掉的。
而且也会把 xb.h 这样类型的也会过滤掉,但搂主只要过滤b.h
其实我也是前阵子一个文件处理的效率要求才开始认真学正则的。这里确实有错,多谢指正。现在正在考虑用平衡组、递归匹配之类解决,不过这些貌似网上的没多少好用的教程和例子
Vimwiki建的小博客 wweir.org

历史的车轮压过一切,任何人或事物都留在了车辙里,只有思想和智慧或附在车辄上走上那么一段时间
回复