このsedコマンドを使用して文字列を解析するmy-team
echo 'origin [email protected]:my-team/myrepo.git (fetch)' | gsed "s/origin.*bitbucket.org\(:\)\(.*\)\/.*/\2/"
しかし、「:」または「/」と一致させるためにOR演算子を使用したいと思います。私が理解できないエラーが発生します。
echo 'origin [email protected]:my-team/myrepo.git (fetch)' | gsed -r "s/origin.*bitbucket.org\(:|\/\)\(.*\)\/.*/\2/"
gsed: -e expression #1, char 45: invalid reference \2 on `s' command's RHS
gsed バージョン:
gsed --version
gsed (GNU sed) 4.7
答え1
\2
2番目の一致を印刷することを意味します。目標が印刷されている場合:my-team
(質問で明確ではない)、次のことができます。
echo 'origin [email protected]:my-team/myrepo.git (fetch)' |\
gsed "s/origin.*bitbucket.org\(:.*\)\/.*/\1/"
:
または、存在する場合でも一致させるには、 /
一致しないグループを使用できます。次のように(<regex>)
書かれています(:?<regex>)
。
echo 'origin [email protected]:my-team/myrepo.git (fetch)' |\
gsed -r "s/origin.*bitbucket.org(:?:|\/)(.*)\/.*/\2/"
これはmy-team
両方の場合に生成されます。
混乱した理由は、sedからコマンドを分離するために正規表現でその文字をエスケープする必要がある文字(通常は/が表示されている)を使用できるためだと思います。したがって、これを認識しなければ、何から逃げているのかは明らかではありません。,
代わりに使用する場合は、/
この文字をエスケープする必要はありません。
echo 'origin [email protected]:my-team/myrepo.git (fetch)' |\
sed -r "s,origin.*bitbucket.org(:?:|/)(.*)\/.*,\2,"
:?
:
2つの文字(または)のいずれかが常に存在すると確信している場合は、/
実際には必要ありません。