ファイルを含むGitリポジトリが複数あります。mergedriver.info
ファイルは常に次のようになります。
<project name>
<repository name>
Gitマージドライバによってトリガされたスクリプトはこのファイルを評価します。
mergedriverinfo="$(git cat-file -p HEAD:mergedriver.info)"
success=$?
if [[ "$success" == "0" ]]; then
log "Evaluating mergedriver.info"
PROJECT_KEY="$(sed -E 's/([^\s]+)\s+([^\s]+)/\1/' <<< $mergedriverinfo)"
REPO_SLUG="$(sed -E 's/([^\s]+)\s+([^\s]+)/\2/' <<< $mergedriverinfo)"
log "PROJECT_KEY=$PROJECT_KEY"
log "REPO_SLUG=$REPO_SLUG"
else
log "Unable to read mergedriver.info"
exit 1
fi
この場合、sedの動作を理解していません。
そのためにmergedriver.info
:
test
conflict-on-auto-merge
ログ出力は次のとおりです。
2017-07-20 11:05:51.747 PROJECT_KEY=test
2017-07-20 11:05:51.748 REPO_SLUG=tesconflict-on-auto-merge
最初はmergedriver.infoを使用しsed -n 1p/2p
てhead
/読み込もうとしましたが、残念ながらtail -1
このスクリプトを実行する2つのプラットフォームの出力が異なりました。$(git cat-file -p HEAD:mergedriver.info)
プラットフォーム1:
$ od -c <<< $(git cat-file -p HEAD:mergedriver.info)
0000000 t e s t \n c o n f l i c t - o n
0000020 - a u t o - m e r g e \n
0000034
プラットフォーム2:
± od -c <<< $(git cat-file -p HEAD:mergedriver.info)
0000000 t e s t c o n f l i c t - o n
0000020 - a u t o - m e r g e \n
0000034
この問題を解決するには?
ベストアンサー1
sed
正規表現は、すべきだと[^\s]
思う作業をしないことに気づくべきです。空白以外の文字を検索しますが、バックスラッシュ\
と文字という2つの文字を無効にしますs
。
\S
特にこの目的に必要なものがあります。
複数行にわたって表示されるManage mergedriver.infoコマンドの出力は、ツールボックスのN
コマンドです。sed
PROJECT_KEY=$(sed -nEe '$!N;s/(\S+)\s+(\S+)/\1/p' <<<"$mergedriverinfo")
REPO_SLUG=$(sed -nEe '$!N;s/(\S+)\s+(\S+)/\2/p' <<<"$mergedriverinfo")