我有这个文件:
header:
title: hello
version: 1.2.3
Run Code Online (Sandbox Code Playgroud)
我想提取版本号。
我最初的尝试是
grep ^\s+version:\s+(\d\.\d\.\d) file.txt
Run Code Online (Sandbox Code Playgroud)
但这产生了空输出。在评论中提出建议后,我尝试了
grep -P '^\s+version:\s+(\d\.\d\.\d)' file.txt
Run Code Online (Sandbox Code Playgroud)
但我得到“版本:1.2.3”而不是“1.2.3”。
我究竟做错了什么?
pLu*_*umo 10
grep默认情况下使用Posix Basic Regex ( BRE),它不支持您的表示法。
使用grep -E使用POSIX扩展正则表达式(ERE),并grep -P使用Perl兼容的正则表达式(PCRE如果可用)。
您的符号适用于grep -P:
grep -P '^\s+version:\s+(\d\.\d\.\d)' file.txt
Run Code Online (Sandbox Code Playgroud)
这适用于BRE:
grep '^ \+version: \+\([0-9]\.[0-9]\.[0-9]\)' file.txt
Run Code Online (Sandbox Code Playgroud)
输出:
version: 1.2.3
Run Code Online (Sandbox Code Playgroud)
请注意,这里grep不需要捕获组,因为它不会做任何事情。
如果您只想要版本 nr.,请使用\K和-o选项:
grep -Po '^\s+version:\s+\K\d\.\d\.\d' file.txt
Run Code Online (Sandbox Code Playgroud)
输出:
1.2.3
Run Code Online (Sandbox Code Playgroud)
使用BRE,这是不可能的,您需要链接两个grep命令:
grep 'version: ' file.txt | grep -o '[0-9]\.[0-9]\.[0-9]'
Run Code Online (Sandbox Code Playgroud)
或使用sed(学分@Kusalananda):
sed -n 's/.*version: //p' file.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |