数値を検索するgrep式

数値を検索するgrep式

ホスト名から数字を探したいです。通常、サーバーのホスト名は次のとおりです。

host01.host.name
host02.host.name

最初の記号の前に2つの数字を取得するか、変数に割り当てたいと.思います。適切な命令を出すのに役立つ人はいますか?0102

ベストアンサー1

grepPCRE( -P) 使用:

grep -Po '^[^\d.]*\K\d+(?=\.)' file.txt
  • ^[^\d.]*.最初から最初の数字の前の部分と一致します。その前に数字がないことを確認し、\K一致を削除します。

  • \d+1 つ以上の数値の一致

  • (?=\.)幅0の肯定的な予測モードです.


複数の出力があるため、配列に保存することをお勧めします。

output=( $(grep -Po '^[^\d.]*\K\d+(?=\.)' file.txt) )

これで、配列要素を繰り返すか、n番目の要素の値を取得するuse、すべてのキーのすべての値を取得する"${output[n]}"useなどの一般的な配列アクセス方法を使用できます"${output[@]}"


sed:

sed -E 's/^[^[:digit:].]*([[:digit:]]+)\..*/\1/' file.txt
  • one と同様にgrep、最初から最初の数字の前の部分を一致させ、前に数字が^[^[:digit:].]*ないことを確認します。.

  • ([[:digit:]]+)1つ以上の数字を一致させて、キャプチャされたグループ1に入れます。

  • \..*を一致さ.せ、残りを一致させます。

  • 交換には\1キャプチャされたグループのみを使用


例:

$ cat file.txt
host01.host.name
host02.host.name

$ grep -Po '^[^\d.]*\K\d+(?=\.)' file.txt
01
02

$ sed -E 's/^[^[:digit:].]*([[:digit:]]+)\..*/\1/' file.txt
01
02

おすすめ記事