我想使用sed和regex匹配通过管道传递的多个文件扩展名。
以下作品:
sed '/.\(rb\)\$/!d'
但是,如果我想允许多个文件扩展名,则以下不工作。
sed '/.\(rb\|js\)\$/!d'
sed '/.\(rb|js\)\$/!d'
sed '/.(rb|js)\$/!d'
关于如何做/或内组的任何想法?
以下是整个代码块:
#!/bin/sh
files=`git diff-index --check --cached $against | # Find all changed files
sed '/.\(rb\|js\)\$/!d' | # Only process .rb and .js files
uniq` # Remove duplicate files
答案 0 :(得分:5)
我使用的是Mac OSX 10.8.3,之前的回答对我不起作用,但确实如此:
sed -E '/\.(rb|js)$/!d'
注意:使用-E
至
将正则表达式解释为扩展(现代)正则表达式 而不是基本的正则表达式(BRE)。
这将启用OR函数|
;其他版本似乎希望-r
标志启用扩展正则表达式。
请注意,必须转发初始.
,且不得追尾$
。
答案 1 :(得分:2)
尝试这样的事情:
sed '/\.\(rb\|js\)$/!d'
或者如果您已经使用-r
选项来使用扩展正则表达式来避免转义特殊字符。