- 使用csplit工具
$ csplit -s -z -f "splitoutput-csplit" -b "-%d.pem" chain.pem '/-----BEGIN CERTIFICATE-----/' '{*}'
输入是:chain.pem待split的chain文件
输出是:splitoutput-csplit-<seq>.pem,就是把'-f'和'-b'拼接起来的格式文件。
- 使用awk
$ awk 'BEGIN{count=-1} /-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/{if(/-----BEGIN CERTIFICATE-----/){count++}; print > "splitoutput-awk-"count".pem"}' chain.pem
输入是:chain.pem待split的chain文件
输出是:splitoutput-awk-<seq>.pem
- split在内存里
#!/bin/bash
CERTIFICATES=()
# load a certificate chain file into array variable CERTIFICATES
# input: $0 chain pem file
# output: array variable CERTIFICATES
function load_cert_chain() {
typeset CERTCHAINFILE=$1
CERTIFICATES=()
COUNTER=0;OLDIFS=$IFS; IFS=';' blocks=$(sed -n '/-----BEGIN /,/-----END/ {/-----BEGIN / s/^/\;/; p}' ${CERTCHAINFILE});
for block in ${blocks#;}; do
block="$(echo "${block}" | grep -v "^$")"
CERTIFICATES+=("${block}")
#echo "Certificate[${COUNTER}]=["${block}"]"
COUNTER=$((COUNTER +1))
done; IFS=$OLDIFS
#echo "Total ${COUNTER} certificate is loaded"
}
load_cert_chain tls-ca.pem
for i in "${!CERTIFICATES[@]}"; do
echo "${CERTIFICATES[$i]}" > splitoutput-array-$i.pem
done
输入是:chain.pem待split的chain文件
输出是:splitoutput-array-<seq>.pem
网友评论