私がしようとしているのは、その証明書のコード署名IDを見つけるために、egrep
検索句として私たちのCIプロセスを通して取得した証明書名を使用することです。以下のような検索を行うコードが見えます:戻り値は見えgrepの中に特別な文字を含む変数を使用する
SIGN_IDENTITY="iPhone Distribution: My Great Company, INC. (Alphanumeric_Here)"
CODE_SIGN_IDENTITY=`security find-identity -v -p codesigning | egrep "\d\d?\)\s[a-zA-Z0-9]{40}\s\"${SIGN_IDENTITY}\""`
security find-identity -v -p codesigning
のような:示されているように
1) code_signing_id_40_alphanumeric "iPhone Distribution: My Company (alphanumeric)"
2) code_signing_id_40_alphanumeric "iPhone Developer: My Company (alphanumeric)"
、SIGN_IDENTITY
は正規表現で特別な文字であるとする必要が)
または.
などの文字を持つことができます\)
(またはこの場合は\\)
)に置き換えられます。他の人が同様の問題を抱えているかどうか、そしてこの仕事をしているのに何も見つけられなかった機能があるかどうかを調べるために検索しました。
私はBashも新しくなっています。既存の関数を探したり、SIGN_IDENTITY
regex関連の文字を文字列リテラルに置き換える方法。提案されており、使用することができ
一つの方法は、以下の通りである:
CODE_SIGN_IDENTITY=`security find-identity -v -p codesigning | grep -F "${SIGN_IDENTITY}"`
しかし、私はSIGN_IDENTITY
から特別な文字をエスケープし、正規表現の一部としてそれを使用する方法があるかどうかを知るために好奇心が強いですパターン。平野grep
、ないegrep
またはgrep -E
またはgrep -P
からbre_escape
は、よく、BREのために有効であることを
これは本当にあなたの質問に答えるものではありませんが、Perlと互換性のある正規表現( 'grep -P'または' pcregrep')を使用している場合は、 '\ Q'と' \ E'それらの間の文字のリテラル処理を可能にするためにエスケープします。 –
aside-all-caps変数名は、シェルまたはオペレーティングシステムにとって意味のある変数によって使用されますが、少なくとも1つの小文字を含む名前空間はアプリケーション用に予約されています。シェルやOSに意味のある変数を偶然に上書きする可能性を避けるために、後者のセットの内側にこだわることを検討してください。 –
ご参考までにサンプルデータ*がエスケープする必要はありません。例えば、括弧はEREやPCREでは特殊ですが、BREでは使用できません(これは 'grep'がデフォルトで使用しています)。ピリオドは一文字のワイルドカードですが、マッチングを避ける必要がある「My Great Company、INC!」はどれくらいありそうですか? –