1

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
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 に答える