在bash中将除了第一行和最后一行以外的所有内容读入字符串

在bash中将除了第一行和最后一行以外的所有内容读入字符串,bash,Bash,我试图将一个.csr文件读入一个字符串,但我不想要该文件的第一行和最后一行 我尝试将文件读入字符串,然后将其拆分为数组,但语法无法正常工作 我也试着把它读成一个字符串,然后去掉第一行和最后一行(它们永远不会改变),但我也遇到了同样的问题 我是bash新手,只需要编写这个脚本,任何帮助都将不胜感激 文件为test.csr,如下所示: -----BEGIN CERTIFICATE REQUEST----- TESTESTESTESTESTESTSETESTEESSTSETESTTESTES TEST

我试图将一个.csr文件读入一个字符串,但我不想要该文件的第一行和最后一行

我尝试将文件读入字符串,然后将其拆分为数组,但语法无法正常工作

我也试着把它读成一个字符串,然后去掉第一行和最后一行(它们永远不会改变),但我也遇到了同样的问题

我是bash新手,只需要编写这个脚本,任何帮助都将不胜感激

文件为test.csr,如下所示:

-----BEGIN CERTIFICATE REQUEST-----
TESTESTESTESTESTESTSETESTEESSTSETESTTESTES
TESTESTESTESTESTESTSETESTEESSTSETESTTESTES
...
-----END CERTIFICATE REQUEST-----
作为脱衣的尝试,我用了

csrFile=`cat server.csr`
#echo "$csrFile"
#csrFile=${csrFile##*-----BEGIN CERTIFICATE REQUEST-----  }
#csrFile=${csrFile%% -----END CERTIFICATE REQUEST-----*}
#echo "$csrFile"
但当我重复这句话时,整根绳子仍然完好无损

我尝试拆分为数组

readarray -t my_array <<<"$csrFile"
echo "$my_array"
echo "$csrFile"
( IFS=$'\n'; echo "${csrFile[*]}" )

readarray-t my_array
sed
非常适合这份工作

要去除第一行和最后一行,请使用

sed '1d;$d' server.csr
或者如果你想更精确一些,试试看

sed '/-----\(BEGIN\|END\) CERTIFICATE REQUEST-----/d'  server.csr
要将结果读入变量,请使用shell
$()
语法:

csrfile=$(sed '/-----\(BEGIN\|END\) CERTIFICATE REQUEST-----/d'  server.csr)

一种更便于携带的方法是使用实际上可以读取CSR的工具,如
openssl

openssl req -in server.csr -outform der | base64 -w64
-outform der
将CSR编码为二进制(实际上是ASN1)


base64-w64
将其返回base64,每行64个字符

可能重复:您好,谢谢,我如何将sed读入变量?我的尝试是:csrString=sed'/----开始证书请求------/d/-----结束证书请求------/d'server.csr echo“$csrString”使用csrFilteredString=$(echo“$a”| sed'/----开始证书请求------/d;/----结束证书请求------/d'server.csr)echo“$csrFilteredString”