2017-04-20 7 views
2

APIコールから、次のようなファイルが作成されます。Bashスクリプトによるテキストグループのキャプチャ

{ 
    "success" : true, 
    "messages" : [ "traces loaded successfully" ], 
    "traces" : [ "CRXJ-ZCKP-3XVD-4J36", "8C31-QMHZ-XVF0-ZV4Q", "40P7-MT6L-2YFP-5Q6Q", "JE7J-J4WQ-7GGL-2U8N", "10PW-AZ8M-FPTK-XWYL", "9YGF-5HOP-8GTY-9AF4", "SNXZ-GW6O-BTJT-3XUX" ] 
} 

各トレースを個別にキャプチャするにはどうすればよいですか? それ以降の手順でそれらを繰り返し処理する必要があります。

括弧を削除しない限り、以下は何も返しません。そして、それは単に "トレース"ライン全体を与えます。

grep "([A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4})" 

答えは、ライブラリをロードせずにすべてのUnixマシンで実行できる必要があります。

+0

あなたがオプション-oをしようとします。 – Shiping

+0

'JSON'テキストを' grep'で解析し、 'jq'のような構文認識ツールではないのはなぜですか? – Inian

+0

@Inianでは、このスクリプトはライブラリをロードせずにすべてのUnixマシンで実行できる必要があります。 – citizen

答えて

2

grep -oE '([A-Z0-9]+-?){4}' file 

オプション:

-o, --only-matching  show only the part of a line matching PATTERN 
-E, --extended-regexp  PATTERN is an extended regular expression (ERE) 

出力:

CRXJ-ZCKP-3XVD-4J36 
8C31-QMHZ-XVF0-ZV4Q 
40P7-MT6L-2YFP-5Q6Q 
JE7J-J4WQ-7GGL-2U8N 
10PW-AZ8M-FPTK-XWYL 
9YGF-5HOP-8GTY-9AF4 
SNXZ-GW6O-BTJT-3XUX 

Regex Demo and Explanation

1

使用grep -oE

grep -oE '[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}' file 

が出力:あなたが使用することができます

CRXJ-ZCKP-3XVD-4J36 
8C31-QMHZ-XVF0-ZV4Q 
40P7-MT6L-2YFP-5Q6Q 
JE7J-J4WQ-7GGL-2U8N 
10PW-AZ8M-FPTK-XWYL 
9YGF-5HOP-8GTY-9AF4 
SNXZ-GW6O-BTJT-3XUX 
0

またbashでとどまることができる:

#!/usr/bin/env bash 

regex='("(([[:alnum:]]{4}-?){4})"(,)?)+' 

while read -r line 
do 
    if [[ "$line" =~ $regex ]] 
    then 
     for trace in ${BASH_REMATCH[0]//[\",]/} 
     do 
      echo "do stuff with $trace" 
     done 
    fi 
done<input_file 
関連する問題