2016-08-10 6 views
0

を得るために、誰かが下記のように私は例のJSONテキストを解析した後、値45を得ることができる方法を提案することができ:使用grepのJSONファイルからキーを解析し、値

.... 
"test": 12 
"job": 45 
"task": 11 
..... 

は、私は承知していますのでご注意くださいjqやその他のツールがありますが、これにはインストールが必要です。

私はこれをgrep、awk、またはsedコマンドを使って実行したいと考えています。

+3

'jq'をインストールするのはそれほど難しくありません。これは、任意のディレクトリにコピーできる単一のバイナリファイル(外部依存関係なし)です。 – chepner

+0

ジョブに 'jq'のような専用ツールを使用しないでください。' json'は 'json'に対して' sed'です – sjsam

+0

これは、有効なjsonのようには見えません:/ – sjsam

答えて

2
awk -F'[[:space:]]*:[[:space:]]*' '/^[[:space:]]*"job"/{ print $2 }' 
sed -n 's/^[[:space:]]*"job"[[:space:]]*:[[:space:]]*//p' 
+0

jsonファイルのキーが行の先頭で始まることはほとんどありません。 grep/sed/awkを使って単純な作業を実際に行うことができますが、私は 'jq'を強く推奨します。それをインストールするのは難しくありません - [chepner記載](http://stackoverflow.com/questions/38878724/use-grep-to-parse-a-key-from-a-json-file-and-get-the -value#comment65119527_38878724) – hek2mgl

+0

OPはすでに彼が 'jq'をインストールできない/できないと述べ、代わりに標準のUNIXツールを使って解決策を尋ねました。私はツールをインストールする権限を持っていない多くのマシンを使用しています。多分、OPの場合もそうです。私はまた、飛び越えなければならない多くのマシンを使用し、すばやく何かをするので、そのために非標準ツールを使用するソリューションも避けがちです。OPの実際の入力が彼が投稿した入力のフォーマットに従わない場合は、前にオプションの空白を追加します。 –

+0

確かに、十分なかもしれない短いインタラクティブなハックのために。しかし、スクリプトやプログラムではありません。 OPが 'jq'を使用できない場合は、PHP、Python、Perlなどのスクリプト言語を使用できます。 jsonを処理できるものはほぼ確実にインストールされています。 – hek2mgl

0

あなたはgrep -oP(PCRE)を使用することができます。

grep -oP '"job"\s*:\s*\K\d+' file 

45 

\Kは、以前に一致したデータをresetingために使用されています。上記のコマンド

awk -F ':[ \t]*' '/^.*"job"/ {print $2}' filename 

は、行の先頭に"job"を持っている任意の行に一致し、その行のsecond列を出力します:あなたはそれを印刷したい場合は、awkを使用して

0

。 awkオプション-Fは、カラムセパレータを:に設定し、その後に任意の数のspacesまたはtabsを設定します。

あなたはbashの変数job_valにこの値を格納したい場合は、次のタスクのためのjqよう

job_val=$(awk -F ':[ \t]*' '/^.*"job"/ {print $2}' filename) 
1

使用専用ツール:

は、あなたのfile

[ 
{ 
"test": 12, 
"job": 45, 
"task": 11 
} 
] 
のように見えた持っていました

以下のものはあなたをh青梅

jq ".[].job" file 

fileが家にあなたを得るでしょう

jq ".stuff.job" file 

の下

{ 
"stuff" :{ 
. 
. 
"test": 12, 
"job": 45, 
"task": 11 
. 
. 
} 
} 

のように見えたあなたの持っていました。

関連する問題