2

入力-

試合番号576でXのスコア1725とYのスコア6248

sedに出力してもらいたい-

1725年

6248

私のコード-

sed 's/Score[[:space:]]\([0-9]+\)/\1/g'

上記のコードの出力 -

1725 と Y の 6248 が一致

4

3 に答える 3

3

次のsedコマンドを試すことができます

#!/bin/sed f
s/Score\s*/\
/g
s/\n\([0-9]\+\)[^\n]*/\
\1/g
s/^[^\n]*\n//

最初のコマンドはすべての「スコア」を改行に置き換えるため、すべての数字が行頭に表示されます。改行文字を挿入するには、バックスラッシュに続いて実際の改行を記述する必要があります。そのため、コマンドは 2 行を生成します。

2 番目のコマンドは、行頭にある数字の後のすべてを削除します。これは、改行文字の後に数字が続くものと一致します (これが、この数字の前に「スコア」文字列が付けられた方法です)。数値は variable に取り込まれます\1。次に、改行文字までのすべての文字をスキップします。置換を書き込むときは、改行文字と に取り込まれた数字を復元する必要があります\1

最初の行には最初の「スコア」の前にテキストが含まれているため、それを削除する必要があります。それが最後のコマンドの動作です。パターン スペース (つまり、作業バッファー) の内容の先頭から、最初の改行までのすべての文字に一致します。

1 つのコマンドで:

sed -e 's/Score\s*/\
/g;s/\n\([0-9]\+\)[^\n]*/\
\1/g;s/^[^\n]*\n//'

これが役立つことを願っています=)

于 2012-10-03T15:06:30.587 に答える
2

GNU sed単語境界に一致するため、使用する 1 つの方法\bは拡張です。

echo "X's Score 1725 and Y's Score 6248 in the match number 576" | sed -e '
    ## Surround searched numbers (preceded by "Score") with newline characters.
    s/\bScore \([0-9]\+\)\b/\n\1\n/g;
    ## Delete all numbers not preceded by a newline character.
    s/\([^\n0-9]\)[0-9]\+/\1/g;
    ## Remove all other characters but numbers and newlines.
    s/[^0-9\n]\+//g;
    ## Remove extra newlines.
    s/\n\([0-9]\)/\1/g; 
    s/\n$//
' infile

次の結果が得られます。

1725
6248
于 2012-10-03T15:06:54.070 に答える
0

2 つの egrep の AND を使用できます。

<infile egrep -o 'Score [0-9]+' | egrep -o '[0-9]+$'
于 2012-10-03T17:28:37.880 に答える