grep -oPなしで単純なJSON解析

grep -oPなしで単純なJSON解析

これは私のJSONです。

{"login":"WG1118412764OA","password":"9Hv1zd74nKhYovZa"}

私は非常に基本的なgrepを持っており、Pythonもなく、Perlもなく、明らかにjqもなく、awkとsedだけがあります。

誰でも私を助けることができますか?

ログインとパスワードの値をシェル変数として持っている必要があります。

ありがとう

ナイフ800

答え1

cutツールのみが必要な場合はbuiltinオプションです;-)

OLD_IFS="$IFS"
IFS='"'
set -- $(<file)
IFS="$OLD_IFS"

login=$4
password=$8

でも:

IFS='"' read -r a b c login d e f password g < file

json入力したパスワードや内部パスワードを少し変更しても"問題が発生する場合がありますのでご注意ください。

jsonたとえば、適切なパーサーを使用することをお勧めしますjq。ない場合は、インストールするか、管理者にインストールを依頼してください。常にあなたの仕事に適したツールを持ってください!

答え2

awk、sed、grepだけでなく、必要なPOSIXツールがすべてあると仮定すると、cut次のように入力を使用できます。

$ login=$(cut -d'"' -f4 file)
$ passwd=$(cut -d'"' -f8 file)
$ echo "$login"
WG1118412764OA
$ echo "$passwd"
9Hv1zd74nKhYovZa

これが必要なものでない場合は、質問を編集して適用されない場合を含む、より代表的な入力/出力の例を提供してください。

答え3

存在するコメント、これを行うシステムはOpenWrtルーターと呼ばれていました。 ~からjq利用可能OpenWrtの場合は、それを使用して必要なデータを抽出するのが良い考えのようです。

eval "$(jq -r '"login=\(.login|@sh); password=\(.password|@sh)"' file)"

jqこれは2つのシェルディストリビューションを作成するために使用されます。評価時に、割り当てはデコードされ、引用されたユーザー名とパスワードを2つのシェル変数loginに割り当てますpassword

またはファイルを2回解析したい場合:

login=$(jq -r '.login' file)
password=$(jq -r '.password' file)

関連情報