RegEx-如何使用 grep 提取第二个匹配项

RegEx-如何使用 grep 提取第二个匹配项

如何在 ubuntu 中使用 grep 命令提取此文本中的第二个数字。

文件名 :结果.html?owner=12345

14219,98.2,31-s,19225
39219,92.7,31-s,29225

所需输出:

12345:98.2
12345:92.7

谢谢

答案1

使用 GNU grep,您可以切换到 PCRE 模式,在该模式中您可以使用环视来匹配用逗号括起来的数字:

$ grep -HPo '(?<=,)[0-9.]*(?=,)' file
file:98.2
file:92.7

另一方面,如果你的数据以逗号分隔,更好的选择可能是 Awk:

$ awk -F, '{print FILENAME ":" $2}' file
file:98.2
file:92.7

或者在 perl 中同样如此perl -F, -nlE '{say "$ARGV:$F[1]"}' file


要在 Awk 中拆分文件名,您可以使用

$ awk -F, '{split(FILENAME,a,/=/); print a[2] ":" $2}' Results.html\?owner\=12345 
12345:98.2
12345:92.7

或者(稍微更有效)如果你有 GNU Awk

gawk -F, 'BEGINFILE{split(FILENAME,a,/=/)} {print a[2] ":" $2}' Results.html\?owner\=12345

答案2

根据这个线,没有正确的方法可以使用RegEx和来实现这一点grep

awk根据您的情况,您可以使用或检索您提供的输入数据的第二列sedawk下面是一个使用的示例:

#assuming test.dat contains your data
awk -F"," '{ print $2 }'

#assuming you want to read data from stdout
echo "14219,98.2,31-s,19225" | awk -F"," '{ print $2 }'

相关内容