Sed正则表达式不匹配'或'或'内部组

ala*_*aup 1 regex sed regex-group

我想匹配使用sed和regex通过管道传递的多个文件扩展名.

以下作品:

sed '/.\(rb\)\$/!d'
Run Code Online (Sandbox Code Playgroud)

但是,如果我想允许多个文件扩展名,下面也不能正常工作.

sed '/.\(rb\|js\)\$/!d'
sed '/.\(rb|js\)\$/!d'
sed '/.(rb|js)\$/!d'
Run Code Online (Sandbox Code Playgroud)

关于如何做/或内组的任何想法?

这是整个代码块:

#!/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
Run Code Online (Sandbox Code Playgroud)

jjc*_*jjc 5

我使用的是Mac OSX 10.8.3,之前的回答对我不起作用,但这样做:

sed -E '/\.(rb|js)$/!d'  
Run Code Online (Sandbox Code Playgroud)

注意:使用-E

将正则表达式解释为扩展(现代)正则表达式而不是基本正则表达式(BRE).

这启用了OR功能|; 其他版本似乎希望该-r标志启用扩展正则表达式.请注意,.必须转义首字母并且$不得跟踪尾部.