X的分數1725和Y的分數6248以上576
我想sed來ouput-
我的代碼 -
sed 's/Score[[:space:]]\([0-9]+\)/\1/g'
上面的代碼輸出 -
1725和Y的6248在比賽
X的分數1725和Y的分數6248以上576
我想sed來ouput-
我的代碼 -
sed 's/Score[[:space:]]\([0-9]+\)/\1/g'
上面的代碼輸出 -
1725和Y的6248在比賽
單程GNU sed
因爲\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
你可以嘗試下面的sed命令
#!/bin/sed f
s/Score\s*/\
/g
s/\n\([0-9]\+\)[^\n]*/\
\1/g
s/^[^\n]*\n//
第一個命令repl使用換行符對所有「Score」進行加註,所以現在所有的數字都在一行的開頭。要插入一個換行符,我們必須寫一個反斜槓,後跟一個實際的換行符。這就是爲什麼命令產生兩行。
第二個命令將刪除行首的數字後的所有內容。它將匹配一個換行符,後跟一個數字(這是我們現在如何將這個數字加上「Score」字符串作爲前綴)。該號碼將被捕獲到變量\1
中。然後它會跳過所有字符直到換行符。在編寫替代品時,我們必須將換行符和被捕獲的編號恢復到\1
。
因爲第一行包含第一個「Score」之前的文本,所以我們必須刪除它。這就是最後一條命令的作用,它從模式空間的內容開始(即我們的工作緩衝區)開始,匹配到第一個換行符的所有字符。
在單命令:
sed -e 's/Score\s*/\
/g;s/\n\([0-9]\+\)[^\n]*/\
\1/g;s/^[^\n]*\n//'
希望這有助於=)使用
我只是不想後面的關鍵字得分任何號碼,但號碼,甚至我不知道有多少模式可以在輸入 – user1419742
,你可以和兩個egreps:
<infile egrep -o 'Score [0-9]+' | egrep -o '[0-9]+$'
我不只是想要任何數字,但數字後跟關鍵字分數,甚至我不知道有多少模式可以在那裏輸入 – user1419742
@ user1419742:已更新。 – Birei