私はこのようなgitsvnコマンドを持っています:
_git svn log --limit=1 --oneline
_
次のように1行が出力されます。
_r12345 | <anything, as it is svn comment inputted by svn-user>
_
Sedコマンドをパイプして_12345
_のみを取得しようとしていますが、機能しません。エラーが多く、現在のエラーは_parenthesis not balanced
_です。
私の最後のコマンドは次のとおりでした:
git svn log --limit=1 --oneline | sed -e 's/r\(0-9) |*/\1/'
私はグーグルで検索しましたが、sedのドキュメントは明確ではありません...私は正規表現があまり得意ではありません。私の最高の経験は_git --grep
_で、これは優れたドキュメントで簡略化された正規表現です。
重要な場合、環境はMacOSX端末です。
編集:
sed -n 's/r\(0-9*\)/\1/
は機能しますが、空の文字列を返します。
もうすぐです
_sed -e 's/r\([0-9]*\) .*/\1/'
_
Sedに\([0-9]*\)
が必要なものと不要なものの両方を伝える必要があります/ r
&_.*/
_
sed
は行を変更するためのものであるため、ここでは最適なツールではないように感じますが、これは抽出の問題と見なしています。グループとの正規表現は、非常に合理的な方法です。なんらかの理由で、grep
にはグループを抽出する方法がありませんが、これは奇妙だと思います。ありがたいことに、pcregrep
はそうします。
pcregrep -o1 "^r([0-9]+)"
行の先頭でのみ、パターン「r」の後にいくつかの数字が続きます(これが^
does-そうでなければ、コミットメッセージが別のコミットを参照している場合、複数の一致を抽出する可能性があります)。 -o1
は最初のグループを抽出することです。例:
$ echo "r12345 | <anything>" | pcregrep -o1 "^r([0-9]+)"
12345
なぜsed
の代わりにこれを使用するのですか?純粋に単純化のため。何かを抽出するだけでよいので、純粋な正規表現を使用できます。私はこれをsed
の答えよりもはるかに単純だと考えています。