Grep:如何在这些标记之间提取版本字符串:<version> 1.1.9-beta </version>

时间:2016-04-06 15:31:56

标签: regex grep sh

我想使用命令行正则表达式提取这些标记之间的版本号:

$ cat file.xml
<version>1.0-beta</version>

# example of solution
$ grep regex file.xml  
1.0-beta

4 个答案:

答案 0 :(得分:1)

grep与PCRE(-P)一起使用:

grep -Po '<version>\K[^<]+(?=</version>)' file.xml

示例:

$ grep -Po '<version>\K[^<]+(?=</version>)' <<<'<version>1.0-beta</version>'
1.0-beta

答案 1 :(得分:0)

你可以试试这个:

\<version\>(.*?)\</version\>

答案 2 :(得分:0)

这是一个awk命令,它也适用于BSD或非GNU版本:

awk -F '</?version>' '{print $2}' file

1.0-beta

答案 3 :(得分:0)

如果您需要适用于任何标记的内容:

grep -Po "(?<=>)[^<>]*(?=<)" file.xml

Live demo on regex101

说明:

-P:将模式解释为Perl正则表达式(PCRE),这是必需的,因为我们使用了lookarounds

-o:仅打印与模式匹配的内容,多个匹配由新行分隔

(?<=>):匹配>

的正面后视

[^<>]*:符合任何字符但不符合<>的字符类,*表示0次或更多次

(?=<):匹配<

的正向前瞻