Shell-Script
提取兩個字元串模式之間的數字
我在每一行“年齡=22 歲,身高=6 英尺”中都有一個具有以下表達式類型的文件,我只想提取年齡和身高數字。
我努力了
grep -oP '(?<=Age=)[^years]+' $f | awk '{ printf "%d \n",$1; }
並正確獲取年齡。我怎樣才能同時獲得年齡和身高。當我嘗試嵌套模式匹配時,我只得到高度。
這是我嘗試過的模式
grep -oP '(?<=Age=)[^years]+.+(?<=Height=)[^feet]+' $f | awk '{ printf "%d \n",$1; }
這不是你認為的那樣,它只是偶然地起作用:
[^years]+
這意味著,匹配除, ,之外的任何字元 ,並且至少匹配一次。
y``e``a``r``s
另外,我會使用keep-out ,而不是Look-behind斷言。它的好處是它可以是可變長度的,然後您可以輕鬆地匹配和。
Age``Height
(Age|Height)=\K
然後,不要進行否定匹配,而是使用正匹配,僅匹配數字:
grep -Po '(Age|Height)=\K\d+'
–
$ echo "Age=22 and Height=6" | grep -Po '(Age|Height)=\K\d+' 22 6