次の行で始めます。
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
、16進数(符号または先行なし、つまり0123456789abcdefABCDEF文字シーケンス)を意味し、各単語には少なくとも2つの数字が必要です(そうでない場合は一致abcd
)。 GNUを使用すると、grep
次のことができます。
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 -lne '/((([\da-f]+)\.)(?2)+(?3))/;print $1' file