これは私の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)