ホスト名から数字を探したいです。通常、サーバーのホスト名は次のとおりです。
host01.host.name
host02.host.name
最初の記号の前に2つの数字を取得するか、変数に割り当てたいと.
思います。適切な命令を出すのに役立つ人はいますか?01
02
ベストアンサー1
grep
PCRE( -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