Text-Processing
如何將正則表達式(使用 grep?)的不同結果檢索到變數中?
簡短的問題
給定一個字元串,如何檢索給定正則表達式的幾個子字元串?
echo "hello world 15 42" | grep -P ".*([0-9]+) ([0-9]+)";
不幸的是,這會返回完整的匹配字元串,而不是分別返回 15 和 42。理想情況下,一些變數會恢復它們,所以我可以使用它們:
echo "First: $0, Second: $1"; # echo is only an example
更多上下文
安裝腳本需要從 URL 下載相關文件(使用 wget),但是具體文件名未知,所以腳本需要先下載 index.html 提取文件名,提取版本號並重新建構完整的 URL。
wget 2>/dev/null -O - http://...../directory/ | grep -P "<a href=.... wget "http://..../directory/file-$1-revision-$2.gz" -O downloaded.gz
使用 bash 正則表達式匹配並訪問內置 BASH_REMATCH 數組
s="hello world 15 42" re='.*([0-9]+) ([0-9-]+)' if [[ $s =~ $re ]]; then for key in "${!BASH_REMATCH[@]}"; do printf "%s\t%s\n" "$key" "${BASH_REMATCH[$key]}" done fi
0 hello world 15 42 1 5 2 42
> greparray=($(echo "hello world 15 42" | grep -Eo "[0-9]+ [0-9]+")) > echo ${greparray[1]} 42