1

我想匹配使用 sed 和正则表达式通过管道传递的多个文件扩展名。

以下作品:

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
4

2 回答 2

5

我使用的是 Mac OSX 10.8.3,之前的答案对我不起作用,但这确实:

sed -E '/\.(rb|js)$/!d'  

注意:-E用于

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

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

于 2013-05-31T19:32:17.700 回答
2

尝试这样的事情:

sed '/\.\(rb\|js\)$/!d'

或者,如果您随后使用-r选项来使用扩展正则表达式来避免转义特殊字符。

于 2013-05-31T19:18:20.997 回答