2016-05-09 10 views
0

正確な文字列に一致するが、一部のコンテナは似たような名前があります。私が代わりに実行する場合をGrep/awkは、私はいくつかのコンテナのドッキングウィンドウのIDを見つける必要があり

$ docker images | grep -w app-node-temp | awk -e '{print $3}' 

461c5143a985 

$ docker images 

REPOSITORY  TAG     IMAGE ID    
app-node   latest    620350b79c5a   
app-node-temp latest    461c5143a985 

私が実行している場合を:

$ docker images | grep -w app-node | awk -e '{print $3}' 

620350b79c5a 
461c5143a985 

正確な名前はどのように一致させることができますか?

+0

ダッシュは、非単語文字とみなされます。コンテキストでは、 'grep '^ app-node [[:space:]]''が動作します。もちろん、 'grep' | 'awk'はほとんどの場合アンチパターンです:' docker images | awk '/^app-node [[:space:]]/{print $ 3}' 'が良いでしょう。 –

答えて

2

ダッシュは、非単語文字とみなされ、その差はダッシュでマークされている場合grep -wは動作しません。

文脈では、grep '^app-node[[:space:]]'が機能します。必要な名前の後にスペースを探します。

もちろん、grep | awkはほとんどの場合アンチパターンです。それは使用する方がよいでしょう:

docker images | awk '/^app-node[[:space:]]/ { print $3 }' 

あるいは、awkとの容易な溶液を再び平等を使用しています - 彼のanswerTom Fenechによって示唆されているように:

for server in app-node app-node-temp 
do 
    docker images | awk -v server="$server" '$1 == server { print $3 }' 
    … 
done 

docker imagesを実行すると、あまりにも高価である場合は、実行することができますそのファイルを一度キャプチャしてファイルに出力し、ファイルをスキャンします。これは、シェル変数をawkスクリプトに渡す方法を示しています。

チャンスパイプラインは、コンテナの画像ID情報を取得するために実行されますされています

image_id=$(docker images | awk -v server="$server" '$1 == server { print $3 }') 
5

私は、正確な文字列マッチングでのawkを使うと言うだろう:

docker images | awk '$1 == "app-node" { print $3 }' 
+2

ええ;もっとシンプルな... –

関連する問題