こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

sedの最短マッチ

次の中から最初の"silent":の次に来る数字を抜くとします。
{"listen":{"silent":3,"item":0},"time":{"silent":[100,50,20,5],"item":[1000,500,200,50]}}

echo -n '{"listen":{"silent":3,"item":0},"time":{"silent":[100,50,20,5],"item":[1000,500,200,50]}}' | sed 's/[^silent]*silent":\([0-9]*\).*/\1/'
のようにすると、
{"listen3
という結果になってしまいます。
何か良い方法はありませんでしょうか?
よろしくお願い致します。

投稿日時 - 2017-02-02 20:59:27

QNo.9288980

暇なときに回答ください

質問者が選んだベストアンサー

>前方と同じ数字だった場合は

sed -e 's/"silent":/^A/' -e 's/.*^A\([0-9][0-9]*\).*/\1/'
とかですかね。一度別の文字、上記では「コントロールA」に置換する。
コントロール文字じゃなくて(元のテキスト中に出てこない)普通の文字列でも良いですが。

RubyやPerlをつかうと自然に書けますけど。

投稿日時 - 2017-02-03 01:08:54

お礼

なるほど。こういうやり方もあったんですね!ありがとうございました。

投稿日時 - 2017-02-03 03:56:50

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

3を取りたいと言うことでいいでしょうか?
sed 's/.*"silent":\([0-9][0-9]*\).*/\1/'

投稿日時 - 2017-02-02 22:13:34

お礼

ご回答いただきまして、ありがとうございます。
もし後方が配列ではなく、前方と同じ数字だった場合は何か方法はありませんでしょうか?
例えば:
{"listen":{"silent":3,"item":0},"time":{"silent":5,"item":50}}

投稿日時 - 2017-02-02 22:39:35