我有一个XML文件,该文件由一行组成。
我要做的是通过Putty从文件中提取“finalNumber
”属性值。而不是必须使用记事本++下载副本和搜索。
我已经构建了一个我在On-line Tool上测试过的正则表达式,并尝试在sed
命令中使用duplicate grep functionality。该命令运行但不返回任何内容。
正则表达式:
(?<=finalNumber=")(.*?)(?=")
sed
命令(不返回任何内容,预期28,请参阅文件提取):
sed -n '/(?<=finalNumber=")(.*?)(?=")/p' file.xml
文件提取:
...argo:finalizedDate="2012-02-09T00:00:00.000Z" argo:finalNumber="28" argo:revenueMonth=""...
我觉得我很接近(我可能是错的),我是在正确的路线还是有更好的方法来实现输出?
答案 0 :(得分:18)
这里好老grep没有错。
grep -E -o 'finalNumber="[0-9]+"' file.xml | grep -E -o '[0-9]+'
使用-E
表示扩展正则表达式,-o
仅打印匹配部分。
答案 1 :(得分:8)
虽然你已经选择了一个答案,但这是一种纯sed的方法:
sed -n 's/^.*finalNumber="\([[:digit:]]\+\)".*$/\1/p' <test
输出:
28
这将用匹配编号和打印替换整行(因为p将打印整行,因此您必须替换整行)
答案 2 :(得分:2)
这可能适合你(GNU sed):
sed -r 's/.*finalNumber="([^"]*)".*/\1/' file
答案 3 :(得分:1)
sed
不支持预见断言。不过Perl确实如此:
perl -ne 'print $1 if /(?<=finalNumber=")(.*?)(?=")/'
答案 4 :(得分:-1)
据我所知,这里没有必要使用预见。 试试这个
sed -n '/finalNumber="[[:digit:]]\+"/p'