2016-03-21 15 views
1

名前とIDを抽出して変数に格納する文字列があります。これは単なる例であり、リストは長くても同じ方法で区切られています。文字列の位置から単語を取得する - Bash/Linux

[["freepbx","NEWUPDATES","There are 6 modules available for online upgrades"],["cidlookup","noauth","OpenCNAM Requires Authentication"]] 

文字列内のidはfreepbxとcidlookupです。名前はNEWUPDATESとnoauthです。

私は彼らが出てくるようにしたいと思います:

freepbx NEWUPDATES 
cidlookup noauth 

私はそれがこのよう入力のニーズコマンドラインからプログラムを実行していますよ。

ご協力いただきありがとうございます。

答えて

1

これはそれを行うための一つの方法である:

echo '[["freepbx","NEWUPDATES","There are 6 modules available for online upgrades"],["cidlookup","noauth","OpenCNAM Requires Authentication"]]' | sed -e 's/\],\[/\n/g' -e 's/\(\[\[\)*"//g' | awk -F ',' '{print $1, $2}' 
freepbx NEWUPDATES 
cidlookup noauth 

説明:

sedコマンドs/\],\[/\n/gが新しい行(\n)文字で各レコードを分離するすべての][に置き換えられます。これは、あなたが他のすべてのツールがはるかに容易になり、別のレコード:)

sedコマンドs/\(\[\[\)*"//g引用符と最初のレコードの開始時の初期[[を削除しますと、各ラインを処理することができます。これにより、データの内容が消去され、フィールド間には,だけが残されます。最後

awkコマンド-F ',' '{print $1, $2}'-Fは、第一及び第二のフィールドを印刷するためにフィールド(代わりに、空間の)セパレータ及び$1$2として,を使用するawkを伝えます。

1

awkレスキュー!

$ awk -F'"' -v RS="\\\],\\\[" '{print $2,$4}' file 

freepbx NEWUPDATES 
cidlookup noauth 
+0

これは別の方法です)。 – Rob

0

jq場合が利用可能である:

jq -r '.[] | "\(.[0]) \(.[1])"' 

パイプ.[](アレイ内のすべての要素)の出力所望の出力と同様にのみ0番目と1番目の要素"\(.[0]) \(.[1])"を印刷します。

関連する問題