入力-
試合番号576でXのスコア1725とYのスコア6248
sedに出力してもらいたい-
1725年
6248
私のコード-
sed 's/Score[[:space:]]\([0-9]+\)/\1/g'
上記のコードの出力 -
1725 と Y の 6248 が一致
入力-
試合番号576でXのスコア1725とYのスコア6248
sedに出力してもらいたい-
1725年
6248
私のコード-
sed 's/Score[[:space:]]\([0-9]+\)/\1/g'
上記のコードの出力 -
1725 と Y の 6248 が一致
次の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//'
これが役立つことを願っています=)
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
2 つの egrep の AND を使用できます。
<infile egrep -o 'Score [0-9]+' | egrep -o '[0-9]+$'