- プラットフォーム:RHEL7
- シェル:バッシュ
- 予想される結果:値を変数として保存
次のテキストからIPをキャプチャしようとしています。
{
"ip": "12.34.56.7",
"type": "LEARNED"
}
端末で次のコマンドを実行すると、期待どおり IP を取得します。
grep '"ip":' ../path/to/file.txt | awk '{ print $2 }' | tr -d '"' | tr -d ','
スクリプトの内容は次のとおりです。
IP=grep '"ip":' ../path/to/file.txt | awk '{ print $2 }' | tr -d '"' | tr -d ','
IP=
私はすべてを引用符で囲むか、サイコロを使用しますが、使用せずにgrep ipテキストの周りの引用符をエスケープするなど、いくつかの他の操作を試しました。\\
この問題にアクセスする正しい方法はわかりません。スクリプトに引用符がない場合、スクリプトは私のコマンドを分解するか、何らかの理由でawkから$ 2を削除します。
情報を提供していただきありがとうございます。
ベストアンサー1
シェルコマンドの出力を変数に代入するには、VAR=$(command)
次のように使用します。
IP=$(grep '"ip":' ../path/to/file.txt | awk '{ print $2 }' | tr -d '"' | tr -d ',')
しかし、しばらく前に、誰かが複雑sed
すぎるのを避けるためにパイプラインを発明することにしました。
IP=$(sed '/"ip":/!d;s/",//;s/.*"//' ../path/to/file.txt)
/"ip":/!d
"ip":
ない行はすべて無視s/",//
後続の二重引用符とカンマを削除します。;s/.*"//
残りの二重引用符の前のすべての項目を削除します。