Shell-Script

提取兩個字元串模式之間的數字

  • July 8, 2020

我在每一行“年齡=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

引用自:https://unix.stackexchange.com/questions/597300