2016-09-23 20 views

回答

1

一個快速和骯髒的方式做到這一點在一行是使用grep

read -r var1 var2 < <(grep -o '[0-9]*' file.txt) 

不使用外部程序(因此速度更快),更健壯的方法是使用$BASH_REMATCH

if [[ "$(<file.txt)" =~ ^\((.*),(.*)\)$ ]]; then 
    var1="${BASH_REMATCH[1]}" 
    var2="${BASH_REMATCH[2]}" 
fi 

該方法的基本思想是,我們讀取文件內容爲一個字符串(帶"$(<file.txt)"),然後我們立即測試對正則表達式(與=~運營商)這個字符串。正則表達式包含兩個捕獲組,我們稍後從$BASH_REMATCH數組中檢索。正則表達式通過在字符串的開始和結尾處忽略()來提取組,並找到將它們分開的,

+0

我寧願使用'read'從文件中獲取數據:'read -r line

+0

@gniourf_gniourf該方法的優點是什麼?你讀了一行嗎? – redneb

+1

另一種快速而骯髒的方式:'IFS ='(,)'讀取-r _ var1 var2