いくつかのテキストを含む変数があります。私はそれからいくつかの具体的な情報を得るべきです。たとえば、
export OUTPUT="Running \"protractor:admin\" (protractor) task Using ChromeDriver directly... [launcher] Running 1 instances of WebDriver Jasmine version: 1.3.1 revision 1354556913 SauceOnDemandSessionID=5c72e54365e9bb559ea389dc164ba754 job-name=Admin"
5c72e54365e9bb559ea389dc164ba754
変数が必要ですSAUCE_ID
。実際のSessionIDはスクリプトが実行されるたびに変更されるため、何とか取り出す必要があります。前面SauceOnDemandSessionID=
と背面は常にですjob-name=
。
答え1
シェルに付属の文字列操作機能を使用します。パラメータ拡張。これらの機能は、ダッシュ、bash、kshを含むすべての非アンティークBourneスタイルのシェルに存在します。
suffix=${OUTPUT#*SauceOnDemandSessionID=}
SAUCE_ID=${suffix%%[!0-9A-Fa-f]*}
答え2
IDが常に同じ長さで、文字a〜fと数字のみで構成され、出力に同様の文字列がない場合は、次のことができます。
SAUCE_ID="$(echo $OUTPUT | egrep -o '[0-9a-f]{32}')"
0〜9の数字またはafの文字である32文字の文字列を検索します。
文字列の長さを変更するには、次のように使用します。
SAUCE_ID="$(echo $OUTPUT | egrep -o '[0-9a-f]{26,38}')"
この例は、26〜38文字を含むすべての文字列と一致します。また、これを使用して少なくとも26文字の文字列を一致させることもできます。
SAUCE_ID="$(echo $OUTPUT | egrep -o '[0-9a-f]{26,}')"
答え3
PCREでgrep
正規表現を使用できます。
SauceOnDemandSessionID=\K[^ ]*(?= job-name)
テスト:
$ SAUCE_ID=$(grep -Po "SauceOnDemandSessionID=\K[^ ]*(?= job-name)" <<< "$OUTPUT")
$ echo "$SAUCE_ID"
5c72e54365e9bb559ea389dc164ba754
SauceOnDemandSessionID=
パターンの前後があることを考慮すると、すべての場合に機能します。job-name