を得るために、誰かが下記のように私は例のJSONテキストを解析した後、値45を得ることができる方法を提案することができ:使用grepのJSONファイルからキーを解析し、値
....
"test": 12
"job": 45
"task": 11
.....
は、私は承知していますのでご注意くださいjqやその他のツールがありますが、これにはインストールが必要です。
私はこれをgrep、awk、またはsedコマンドを使って実行したいと考えています。
を得るために、誰かが下記のように私は例のJSONテキストを解析した後、値45を得ることができる方法を提案することができ:使用grepのJSONファイルからキーを解析し、値
....
"test": 12
"job": 45
"task": 11
.....
は、私は承知していますのでご注意くださいjqやその他のツールがありますが、これにはインストールが必要です。
私はこれをgrep、awk、またはsedコマンドを使って実行したいと考えています。
awk -F'[[:space:]]*:[[:space:]]*' '/^[[:space:]]*"job"/{ print $2 }'
sed -n 's/^[[:space:]]*"job"[[:space:]]*:[[:space:]]*//p'
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
OPはすでに彼が 'jq'をインストールできない/できないと述べ、代わりに標準のUNIXツールを使って解決策を尋ねました。私はツールをインストールする権限を持っていない多くのマシンを使用しています。多分、OPの場合もそうです。私はまた、飛び越えなければならない多くのマシンを使用し、すばやく何かをするので、そのために非標準ツールを使用するソリューションも避けがちです。OPの実際の入力が彼が投稿した入力のフォーマットに従わない場合は、前にオプションの空白を追加します。 –
確かに、十分なかもしれない短いインタラクティブなハックのために。しかし、スクリプトやプログラムではありません。 OPが 'jq'を使用できない場合は、PHP、Python、Perlなどのスクリプト言語を使用できます。 jsonを処理できるものはほぼ確実にインストールされています。 – hek2mgl
あなたはgrep -oP
(PCRE)を使用することができます。
grep -oP '"job"\s*:\s*\K\d+' file
45
\K
は、以前に一致したデータをresetingために使用されています。上記のコマンド
awk -F ':[ \t]*' '/^.*"job"/ {print $2}' filename
は、行の先頭に"job"
を持っている任意の行に一致し、その行のsecond
列を出力します:あなたはそれを印刷したい場合は、awk
を使用して
。 awkオプション-F
は、カラムセパレータを:
に設定し、その後に任意の数のspaces
またはtabs
を設定します。
あなたはbashの変数job_val
にこの値を格納したい場合は、次のタスクのためのjq
よう
job_val=$(awk -F ':[ \t]*' '/^.*"job"/ {print $2}' filename)
使用専用ツール:
は、あなたのfile
が
[
{
"test": 12,
"job": 45,
"task": 11
}
]
のように見えた持っていました
以下のものはあなたをh青梅
jq ".[].job" file
はfile
が家にあなたを得るでしょう
jq ".stuff.job" file
の下
{
"stuff" :{
.
.
"test": 12,
"job": 45,
"task": 11
.
.
}
}
のように見えたあなたの持っていました。
'jq'をインストールするのはそれほど難しくありません。これは、任意のディレクトリにコピーできる単一のバイナリファイル(外部依存関係なし)です。 – chepner
ジョブに 'jq'のような専用ツールを使用しないでください。' json'は 'json'に対して' sed'です – sjsam
これは、有効なjsonのようには見えません:/ – sjsam