打印RegEx在bash中使用SED进行匹配

我有一个XML文件,文件由一行组成。

我想要做的是通过Putty从文件中提取“ finalNumber ”属性值。 而不是必须使用记事本++下载副本和search。

我已经build立了一个在线工具上testing过的正则expression式,并尝试在sed命令中使用它来复制grepfunction 。 该命令运行但不返回任何内容。

正则expression式:

 (?<=finalNumber=")(.*?)(?=") 

sed命令(不返回任何内容,预计28,查看文件摘录):

 sed -n '/(?<=finalNumber=")(.*?)(?=")/p' file.xml 

文件提取:

 ...argo:finalizedDate="2012-02-09T00:00:00.000Z" argo:finalNumber="28" argo:revenueMonth=""... 

我觉得我很接近(我可能是错的),我是在正确的路线还是有更好的方法来实现输出?

这里的老grep没什么问题。

 grep -E -o 'finalNumber="[0-9]+"' file.xml | grep -E -o '[0-9]+' 

扩展正则表达式使用-E-o只打印匹配的部分。

尽管您已经选择了一个答案,但您可以在纯sed中执行以下操作:

 sed -n 's/^.*finalNumber="\([[:digit:]]\+\)".*$/\1/p' <test 

输出:

 28 

这将取代整个行的匹配号码和打印(因为p将打印整个行,所以你必须更换整个行)

这可能适用于你(GNU sed):

 sed -r 's/.*finalNumber="([^"]*)".*/\1/' file 

sed不支持预读断言。 不过,Perl的确如此:

 perl -ne 'print $1 if /(?<=finalNumber=")(.*?)(?=")/' 

据我所知,这里没有必要使用预见。 试试这个

 sed -n '/finalNumber="[[:digit:]]\+"/p'