![如何提取仅包含以“点”分隔的数字的单词](https://linux22.com/image/143196/%E5%A6%82%E4%BD%95%E6%8F%90%E5%8F%96%E4%BB%85%E5%8C%85%E5%90%AB%E4%BB%A5%E2%80%9C%E7%82%B9%E2%80%9D%E5%88%86%E9%9A%94%E7%9A%84%E6%95%B0%E5%AD%97%E7%9A%84%E5%8D%95%E8%AF%8D.png)
从下面几行开始
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