Grep:如何提取这些标签之间的版本字符串:<version>1.1.9-beta</version>
Grep: How to extract version string between these tags: <version>1.1.9-beta</version>
我想使用命令行正则表达式提取这些标签之间的版本号:
$ cat file.xml
<version>1.0-beta</version>
# example of solution
$ grep regex file.xml
1.0-beta
将 grep
与 PCRE (-P
) 结合使用:
grep -Po '<version>\K[^<]+(?=</version>)' file.xml
示例:
$ grep -Po '<version>\K[^<]+(?=</version>)' <<<'<version>1.0-beta</version>'
1.0-beta
你可以试试这个:
\<version\>(.*?)\</version\>
这是一个同样适用于 BSD 或非 GNU 版本的 awk 命令:
awk -F '</?version>' '{print }' file
1.0-beta
如果您需要适用于 任何 标签的内容:
grep -Po "(?<=>)[^<>]*(?=<)" file.xml
Live demo on regex101
解释:
-P
:将模式解释为 Perl 正则表达式 (PCRE),这是必需的,因为我们使用 lookarounds
-o
: 只打印模式匹配的内容,多个匹配用新行分隔
(?<=>)
:匹配 >
的正后视
[^<>]*
: 字符 class 匹配任何字符但不匹配 <
也不匹配 >
, *
表示 0 次或多次
(?=<)
:匹配 <
的正向前看
我想使用命令行正则表达式提取这些标签之间的版本号:
$ cat file.xml
<version>1.0-beta</version>
# example of solution
$ grep regex file.xml
1.0-beta
将 grep
与 PCRE (-P
) 结合使用:
grep -Po '<version>\K[^<]+(?=</version>)' file.xml
示例:
$ grep -Po '<version>\K[^<]+(?=</version>)' <<<'<version>1.0-beta</version>'
1.0-beta
你可以试试这个:
\<version\>(.*?)\</version\>
这是一个同样适用于 BSD 或非 GNU 版本的 awk 命令:
awk -F '</?version>' '{print }' file
1.0-beta
如果您需要适用于 任何 标签的内容:
grep -Po "(?<=>)[^<>]*(?=<)" file.xml
Live demo on regex101
解释:
-P
:将模式解释为 Perl 正则表达式 (PCRE),这是必需的,因为我们使用 lookarounds
-o
: 只打印模式匹配的内容,多个匹配用新行分隔
(?<=>)
:匹配 >
[^<>]*
: 字符 class 匹配任何字符但不匹配 <
也不匹配 >
, *
表示 0 次或多次
(?=<)
:匹配 <