我只是想獲取提交 ID,但不太確定我錯過了什么:
? ~ curl https://github.com/microsoft/vscode/releases -s | grep -oE 'microsoft/vscode/commit/(.*?)/hovercard'
microsoft/vscode/commit/ccbaa2d27e38e5afa3e5c21c1c7bef4657064247/hovercard
我唯一需要從這里回來的是ccbaa2d27e38e5afa3e5c21c1c7bef4657064247。
這在 regex101.com 和 ruby??/python 上作業得很好。我錯過了什么?
uj5u.com熱心網友回復:
如果支持,您可以使用 grep -oP
echo "microsoft/vscode/commit/ccbaa2d27e38e5afa3e5c21c1c7bef4657064247/hovercard" | grep -oP "microsoft/vscode/commit/\K.*?(?=/hovercard)"
輸出
ccbaa2d27e38e5afa3e5c21c1c7bef4657064247
另一種選擇是sed與捕獲組一起使用
echo "microsoft/vscode/commit/ccbaa2d27e38e5afa3e5c21c1c7bef4657064247/hovercard" | sed -E 's/microsoft\/vscode\/commit\/([^\/] )\/hovercard/\1/'
輸出
ccbaa2d27e38e5afa3e5c21c1c7bef4657064247
uj5u.com熱心網友回復:
關鍵是grep不支持提取捕獲組子匹配。如果你安裝pcregrep你可以做到這一點
curl https://github.com/microsoft/vscode/releases -s | \
pcregrep -o1 'microsoft/vscode/commit/(.*?)/hovercard' | head -1
該 | head -1部分僅獲取第一次出現。
我建議awk在這里使用:
awk 'match($0,/microsoft\/vscode\/commit\/[^\/]*\/hovercard/){print substr($0,RSTART 24,RLENGTH-34);exit}'
正則運算式將匹配包含
microsoft\/vscode\/commit\/-microsoft/vscode/commit/固定字串[^\/]*- 零個或多個字符,除了/\/hovercard- 一個/hovercard字串。
在substr($0,RSTART 24,RLENGTH-34)將列印的行的部分開始于RSTART 24(24是長度microsoft/vscode/commit/)指數和RLENGTH是長度microsoft/vscode/commit/ 的長度/hovercard。
該exit命令將獲取您第一次出現的資訊。如果您需要所有事件,請將其洗掉。
uj5u.com熱心網友回復:
您可以使用sed:
curl -s https://github.com/microsoft/vscode/releases |
sed -En 's=.*microsoft/vscode/commit/([^/] )/hovercard.*=\1=p' |
head -n 1
head -n 1是列印第一個匹配項(有 10 個)grep -o將列印(僅)所有匹配項,包括microsoft/等。- Mac 的
grep.grep -o列印所有匹配的文本(與列印匹配行的默認行為相比),包括microsoft/等。實作 perl 正則運算式的 grep(如 Linux 上的 GNU grep)可以使用前瞻/后視 (grep -Po '(?<=microsoft/vscode/commit/)[^/] (?=/hovercard)')。但它在 Mac 的 grep 上不可用。
uj5u.com熱心網友回復:
在 MacOS 上,默認情況下您沒有可用的 gnu 實用程式。您可以將輸出通過管道傳輸到這樣的簡單程式awk:
curl https://github.com/microsoft/vscode/releases -s |
grep -oE 'microsoft/vscode/commit/[^/] /hovercard' |
awk -F/ '{print $(NF-1)}'
ccbaa2d27e38e5afa3e5c21c1c7bef4657064247
3a6960b964327f0e3882ce18fcebd07ed191b316
f4af3cbf5a99787542e2a30fe1fd37cd644cc31f
b3318bc0524af3d74034b8bb8a64df0ccf35549a
6cba118ac49a1b88332f312a8f67186f7f3c1643
c13f1abb110fc756f9b3a6f16670df9cd9d4cf63
ee8c7def80afc00dd6e593ef12f37756d8f504ea
7f6ab5485bbc008386c4386d08766667e155244e
83bd43bc519d15e50c4272c6cf5c1479df196a4d
e7d7e9a9348e6a8cc8c03f877d39cb72e5dfb1ff
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/370962.html
上一篇:如何將標準輸出偽裝成檔案?
