从下面几行开始
abcd efgh ijhk lmn opqrs 9.0.8.2c tuv wxyz
abcd efgh ijhk lmn opqrs 8.1.3.9b
如何仅提取
9.0.8.2c
8.1.3.9b
答案1
也试试
grep -oE "(\w*[.]\w*)*" file
9.0.8.2c
8.1.3.9b
答案2
尝试这个,
grep -E -o '[0-9]\.[0-9]\.[0-9]\.[0-9][^[:space:]]+' file
-E
将 PATTERN 解释为扩展正则表达式-o
仅打印匹配行的匹配部分[^[:space:]]+
直到空白处
答案3
如果通过单词,你的意思是非空白字符的序列,并且数字,你的意思是十六进制(没有符号或前导0x
,所以 0123456789abcdefABCDEF 字符的序列),并且每个单词至少需要两个这些数字(否则abcd
也会匹配),使用 GNUgrep
你可以这样做:
grep -Pio '(?<!\S)[0-9a-f]+(\.[0-9a-f]+)+(?!\S)'
或者与perl
:
perl -lne 'for (/\S+/g) {print if /^[\da-f]+(\.[\da-f]+)+$/}'
答案4
假设这些值位于文件内,使用 pcre grep:
$ grep -P '(([0-9a-f]+)\.)(?1)+(?2)' file
9.0.8.2c
8.1.3.9b
或者使用 perl:
perl -lne '/((([\da-f]+)\.)(?2)+(?3))/;print $1' file