【问题标题】:Reading everything but first and last line into a string in bash将除第一行和最后一行之外的所有内容读入bash中的字符串
【发布时间】:2019-08-23 10:35:20
【问题描述】:

我正在尝试将 .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[*]}" )

但这并没有打印出任何东西

【问题讨论】:

标签: bash


【解决方案1】:

sed 非常适合这份工作。

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

sed '1d;$d' server.csr

或者如果您想更精确,请尝试

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

要将结果读入变量,请使用 shell $() 语法:

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

【讨论】:

  • 您好,谢谢您,如何将 sed 读入变量?我的尝试是: csrString = sed '/-----BEGIN CERTIFICATE REQUEST-----/d;/-----END CERTIFICATE REQUEST-----/d' server.csr echo "$csrString"
  • 使用 csrFilteredString=$(echo "$a" | sed '/-----BEGIN CERTIFICATE REQUEST-----/d;/-----END CERTIFICATE REQUEST- 管理它----/d' server.csr) echo "$csrFilteredString"
【解决方案2】:

更便携的方法是使用可以读取 CSR 的工具,例如 openssl

openssl req -in server.csr -outform der | base64 -w64

-outform der将CSR编码成二进制(其实是ASN1)

base64 -w64 将其恢复为 base64,每行 64 个字符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 2014-01-12
    • 2011-01-16
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    相关资源
    最近更新 更多