use*_*623 1 scripting awk shell-script numeric-data
我在每一行“年龄= 22 岁,身高= 6 英尺”中有一个具有以下表达式类型的文件,我只想提取年龄和身高数字。
我试过了
grep -oP '(?<=Age=)[^years]+' $f | awk '{ printf "%d \n",$1; }
Run Code Online (Sandbox Code Playgroud)
并正确获取年龄。我怎样才能得到年龄和身高。当我尝试嵌套模式匹配时,我只得到高度。
这是我试过的模式
grep -oP '(?<=Age=)[^years]+.+(?<=Height=)[^feet]+' $f | awk '{ printf "%d \n",$1; }
Run Code Online (Sandbox Code Playgroud)
这不是在做你认为它做的事情,它只是偶然地起作用:
[^years]+
Run Code Online (Sandbox Code Playgroud)
这意味着,匹配任何字符除外 y
,e
,a
,r
和s
至少一次。
另外,我会使用keep-out来代替Look-behind断言。它的好处是它可以是可变长度,然后您可以轻松匹配和。Age
Height
(Age|Height)=\K
Run Code Online (Sandbox Code Playgroud)
然后,不要进行负匹配,而是使用正匹配,只匹配数字:
grep -Po '(Age|Height)=\K\d+'
Run Code Online (Sandbox Code Playgroud)
——
$ echo "Age=22 and Height=6" | grep -Po '(Age|Height)=\K\d+'
22
6
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
463 次 |
最近记录: |