文字列の2番目の値を取得するには、grepまたはawkを使用します。

文字列の2番目の値を取得するには、grepまたはawkを使用します。

Bashでは、次のファイルから文字列を読みました。

"network": "Purple",

grep、awk、またはsedを使用して「Purple」(引用符を除く)文字列のみを抽出して変数に割り当てるにはどうすればよいですか?

最後に引用符とカンマを削除する必要があります。

場合によっては、「紫」という言葉は含まれておらず、他の色である可能性がありますが、常に単一の単語です。

次のコードを試してみましたが、完璧に動作しませんでした。

#!/bin/bash

NETWORK=`cat generalInfo.info | grep network | awk '{print $2}'`

if [ $NETWORK -eq "Purple" ]; then
    echo "This network is Purple"
else
    echo "This network is not Purple"
fi

exit 0

これまで、このコードを使用すると「紫」が表示されますが、一重引用符とコンマを削除する必要があります。 awkの区切り文字で二重引用符を使用する方が簡単ですか?

GeneralInfo.infoファイルはjsonと同じ形式のテキストファイルです。私はjqを使用してファイルを解析できることを読んでいましたが、特定のインスタンスではjqがインストールされていないためインストールできません。

助けてくれてありがとう。

ベストアンサー1

これを行う方法はいくつかあります。しかし、コメントですでに述べたように、これが実際に構造化されたJSONデータである場合は、jqJSONを解析するように設計された同様のものを調べたい場合があります。

言及した簡単なケースでは、次のようないくつかのオプションがあります。

  1. アッ

     $ echo '"network": "Purple",' | awk '/network/{ gsub(/[",]/,"",$2); print $2}'
     Purple
    
  2. GNU grep

     $ echo '"network": "Purple",' | grep -oP '"network":\s*"\K[^"]+'
     Purple
    
  3. sed

     $ echo '"network": "Purple",' | sed -n 's/"network": *"\([^"]*\).*/\1/p'
     Purple
    

    または

     $ echo '"network": "Purple",' | sed -En 's/"network":\s*"([^"]+).*/\1/p'
     Purple
    

最後に、シェルスクリプトではすべて大文字の変数名を使用しないでください。慣例により、グローバル環境変数は大文字で表されます。これは、独自の変数名も大文字で表示すると混乱を招く可能性があります。スクリプトの特定のケースでは変数は必要ありません。次のようにスクリプトを再構築します。

#!/bin/bash

grep -q 'network.*Purple' generalInfo.info &&
    echo "This network is Purple" ||
    echo "This network is not Purple"

catファイルが存在することを確認するためにファイルを作成したり、grep変数に何かを保存したりする必要はありません。

おすすめ記事