Linuxでコロンで区切られたキーと値のペアから値部分を抽出する

Linuxでコロンで区切られたキーと値のペアから値部分を抽出する

arn:aws:sns:us-west-2:596873354795:demoコマンドを使用してファイルから次の内容をインポートする必要がありますsed。順序は何ですか?

サンプルファイル:

{
    "TopicArn": "arn:aws:sns:us-west-2:596873354795:demo"
}

答え1

サンプルファイルは次のような構造化形式になっています。JSONsedこれらのファイルを操作するのに便利なツールではありません。代わりに、次のJSON形式パーサーをインストールしてください。jq

Debian シリーズ Linux にインストールするには:

sudo apt-get install jq

Red Hat シリーズ Linux にインストールするには:

sudo yum install jq

他のディストリビューションやプラットフォームについては確認してください。このページ


次に、次を実行します。

cat sample_file | jq -r '.["TopicArn"]'

取得するには:

arn:aws:sns:us-west-2:596873354795:demo

チェックしているケースjqマニュアルより複雑なファイルを検索するために使用されます。

答え2

sed、grep、awkなどの行ベースのツールに慣れていて、単にキーと値のペアを抽出したい場合は、使用する方がjsonpipe良いかもしれませんjq

/デフォルトでは、キーはタブで値から区切られた別々のパスとして印刷されます。

例えば

$ json='{"TopicArn": "arn:aws:sns:us-west-2:596873354795:demo"}'

$ echo "$json" | jsonpipe 
/   {}
/TopicArn   "arn:aws:sns:us-west-2:596873354795:demo"

$ echo "$json" | jsonpipe | awk -F'\t' '$1 == "/TopicArn" {print $2}'
"arn:aws:sns:us-west-2:596873354795:demo"

Debian パッケージの詳細:

パッケージ: python-jsonpipe

Description-ja: JSONをUNIXに適した行ベースの形式に変換

jsonpipeはJSONオブジェクトを反復処理し、grep、sed、awk、cut、diffなど、お気に入りのすべてのUNIXツールで処理できる単純な行ベースのテキスト形式を生成します。プログラミング言語でも便利です。実際、もともとは、使用中の特定の構造にテストを密接に結びつけることなく、JSON出力に対して簡単なテストアサーションを作成する方法として設計されました。

ホームページ:http://pypi.python.org/pypi/jsonpipe

関連情報