「ドット」で区切られた数字のみを含む単語を抽出する方法

「ドット」で区切られた数字のみを含む単語を抽出する方法

次の行で始めます。

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
  • -EPATTERNを拡張正規表現として解釈
  • -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

関連情報