我有一个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'