0

私はこの文字列を持っています:

XXXX:  150: some texxt: long text

この場合、 ::likeの間の数字だけを取得する必要があります。:150:

    echo "$LINE" |sed -n 's/^.*\XXXX:\(.*\)\:.*/\1/p'

私を取得します 150: some texxt

遅延させて最初の試合で停止するにはどうすればよいですか

4

3 に答える 3

0

これがあなたのケースでうまくいくかどうかはわかりませんが、この正規表現は : 文字の間のすべての数字を見つけます。

:\s*(\d+)\s*:

この番号は Capture Group 1 にあります。

キャプチャ グループを調べる必要がなく、単純に一致全体を使用する別の同様のアプローチは次のようになります (ただし、これは Perl では機能しないようです)。

(?<=:\s*)\d+(?=\s*:)
于 2012-11-30T20:25:16.063 に答える
0
$ LINE='XXXX:  150: some texxt: long text'

$ echo "$LINE" | sed -r 's@^[^:]+:([^:]+):.*@\1@g'
 150

また

$ echo "$LINE" | perl -pe 's@.*?:([^:]+):.*@\1@g'
 150

説明

  • [^x]意味 : x文字を除外する
于 2012-11-30T19:21:02.657 に答える
0

用語は「非貪欲」です。

^.*?\XXXX:\(.*\)\:.*

?afterを追加することで達成されます.*

于 2012-11-30T20:28:19.140 に答える