bashスクリプトで段落全体を配列の1つの要素として保存する方法

bashスクリプトで段落全体を配列の1つの要素として保存する方法

次のコードを使用してファイルからデータを読み取り、配列に保存しようとしていabcd.txt ますが、保存できますが、証明parameters書全体をインポートすることはできません。これを達成する方法を教えてください。619617parameter[0]updateparameters[1]parameters[2]

    filename="/home/abcd.txt"
    i=1
    index=0
        while read -r line
        do
            i=$line
            parameters[$index]=$(echo $i | awk -F'=' '{print $2}')
            i=$((i+1))
            index=$((index+1))
            if [ "$index" == "3" ]
             then
                break
            fi
        done < "$filename"
        echo ${parameters[0]} ${parameters[1]} ${parameters[2]}
#       python /opt/symstream/bin/configure.py ${parameters[0]} ${parameters[1]} ${parameters[2]}

ファイル名には次のデータが含まれます。

cat abcd.txt

serial_no=619617
action=update
certificate=-----BEGIN CERTIFICATE-----
MIIDaTCCAlGgAwIBAgIJAPwqZH3OF7E4MA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV
BAYTAklOMRIwEAYDVQQKDAlTeW1zdHJlYW0xDDAKBgNVBAsMA1JuRDEaMBgGA1UE
AwwRcGMxLnN5bXN0cmVhbS5jb20wHhcNMTUwNzAzMDQ0ODE2WhcNMjUwNzAzMDQ0
ODE2WjBLMQswCQYDVQQGEwJJTjESMBAGA1UECgwJU3ltc3RyZWFtMQwwCgYDVQQL
DANSbkQxGjAYBgNVBAMMEXBjMS5zeW1zdHJlYW0uY29tMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEA2CJtHYzvIAc7vX9l3Dw5VInEsY4WBjvch/CWSWEW
Xm3QMKadXaBoamOdjKXaowW//dXAYjf4d6vH3h+f9dpzcTkf7oN8pYin6DiXYZJK
CCL7u4hOY0eIq02OJcZwl/qhms+bmxTPN8ph+qnRIot7NzxnkT4AyyPyvGLtSLL6
4E1NGBWZF7JLJKwuvHuMYC2dYHYdBie2G9rczel09hteaoeaulRyWo+sKiFQRO15
XQWfEWfcZhaLHDkNbR+1K/YctuZwFvXPUjC8RFmRptz8n2ZqT1uYrTxKFAXcg/Cp
/DFRV3Q/6/pYWf8u1u2v1Mg5MXdZnjf4jTNUJcmJQiJAsQIDAQABo1AwTjAdBgNV
HQ4EFgQU9snp1dOf74Af6619J838d3jjuAAwHwYDVR0jBBgwFoAU9snp1dOf74Af
6619J838d3jjuAAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZWrs
icxkOBOrw2oJQ04fibtw/gfaaGeHWQA73s+nsFtgI9TbpzGt1HWcESuJfEeg7XDd
gKOU2MNcQE6pIi1qjX104R5o66Covco4K1bZdvBmiKJdXNkoECOoXpupWaq+KoVY
Px1d1Yv697+q2dmtGG3ThlfJeKdmCx4X/miajK5Mbota49DTFFckba9RsSBottfd
74VIUcw581A9W3b9C5lk8bcvQfWsdnJAMwN5ktrIcVyp29ti5tdLPEXKmCZcFq/z
KKl2+HPKd8m5t2BaJn6wkPd3Qj1dZQ5kLlgKJg9IbWD6+S1MaOHNDvH8o1Z29dEY
Jv/a5hmEAJ8BX4v9Cw==
-----END CERTIFICATE-----

ベストアンサー1

問題は、while readファイルを1行ずつ読み取ることです。証明書は複数行(明示的な改行を含む)に分散されているため、以前のように簡単に読むことはできません。すべてのファイルが同じで複数の証明書などがない場合は、次のことができます。

1行目と2行目を削除し、certificate=ファイルの残りの部分を削除してから配列要素に読み込みます(次にRemove newlinesを使用tr)。

arr[2]="$(sed '1,2d;s/certificate=//' abcd.txt | tr -d '\n' )"

正直なところ、さまざまな複雑さを持つ3つの要素を繰り返すことも役に立たないと思います。したがって、最初の2つの要素は次のようになります。

arr[0]="$( awk -F'=' 'NR == 1 { print $2 }' abcd.txt )"

(2番目の要素と同じNR == 2)またはsed上記と同じ

arr[0]="$(sed -n '1s/.*=//p' abcd.txt)"

(2番目の要素はと同じ2s...

おすすめ記事