在bash中使用SED打印RegEx匹配

Mat*_*man 10 regex linux bash sed

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

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

我已经构建了一个我在在线工具上测试的正则表达式,并尝试在sed命令中使用它来复制grep功能.该命令运行但不返回任何内容.

正则表达式:

(?<=finalNumber=")(.*?)(?=")
Run Code Online (Sandbox Code Playgroud)

sed 命令(不返回任何内容,预期28,请参阅文件提取):

sed -n '/(?<=finalNumber=")(.*?)(?=")/p' file.xml
Run Code Online (Sandbox Code Playgroud)

文件提取:

...argo:finalizedDate="2012-02-09T00:00:00.000Z" argo:finalNumber="28" argo:revenueMonth=""...
Run Code Online (Sandbox Code Playgroud)

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

Per*_*one 20

好老grep没问题.

grep -E -o 'finalNumber="[0-9]+"' file.xml | grep -E -o '[0-9]+'
Run Code Online (Sandbox Code Playgroud)

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


tex*_*uce 9

虽然你已经选择了一个答案,但这里有一种你可以用纯sed做的方法:

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

输出:

28
Run Code Online (Sandbox Code Playgroud)

这将通过匹配编号和打印替换整行(因为p将打印整行,因此您必须替换整行)