如何提取仅包含以“点”分隔的数字的单词

如何提取仅包含以“点”分隔的数字的单词

从下面几行开始

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

相关内容