Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash中将多行文件转换为具有换行符的字符串?_Linux_Bash - Fatal编程技术网

Linux 如何在bash中将多行文件转换为具有换行符的字符串?

Linux 如何在bash中将多行文件转换为具有换行符的字符串?,linux,bash,Linux,Bash,如何在bash中将具有多行的文件转换为具有\n字符的字符串 例如,我有一个需要在我的配置JSON文件中配置的证书 因此,与其 ----开始证书----- MIIDBjCCMIIDB MIIDBjCCMIIDB .... MIIDBjCCMIIDB== -----结束证书----- 我要 ----开始证书------\nMIIDBjCCMIIDB\nMIIDBjCCMIIDB\n…\nMIIDBjCCMIIDB==\n----结束证书----- 单向使用awk: $awk'$1=$1'或'\\

如何在bash中将具有多行的文件转换为具有
\n
字符的字符串

例如,我有一个需要在我的配置
JSON
文件中配置的证书 因此,与其

----开始证书-----
MIIDBjCCMIIDB
MIIDBjCCMIIDB
.... 
MIIDBjCCMIIDB==
-----结束证书-----
我要

----开始证书------\nMIIDBjCCMIIDB\nMIIDBjCCMIIDB\n…\nMIIDBjCCMIIDB==\n----结束证书-----

单向使用
awk

$awk'$1=$1'或'\\n'文件
-----开始证书------\nMIIDBjCCMIIDB\nMIIDBjCCMIIDB\n…\nMIIDBjCCMIIDB==\n------结束证书------\n
另一个awk解决方案

$ awk -v RS= '{gsub(/\n+/, "\\n")}1' file
-----BEGIN CERTIFICATE-----\nMIIDBjCCMIIDB\nMIIDBjCCMIIDB\n    .... \nMIIDBjCCMIIDB==\n-----END CERTIFICATE-----
通过sed

$ sed ':a;N;$!ba;s/\n/\\n/g' file
-----BEGIN CERTIFICATE-----\nMIIDBjCCMIIDB\nMIIDBjCCMIIDB\n    .... \nMIIDBjCCMIIDB==\n-----END CERTIFICATE-----
纯粹的痛击(带痛击)≥4) 应该相当有效的可能性:

mapfile -t lines_ary < file
printf -v cert '%s\\n' "${lines_ary[@]}"
需要注意的一点是,您将有一个尾随
\n
。如果这不是一个问题,你对这种方法很在行。否则,您可以通过在
printf-v
语句后面添加以下行来删除它:

cert=${cert%\\n}

Bash具有简单的字符串替换

cert=$(cat file)
echo "${cert//$'\n'/\\n}"

我最初在替换部分中有单引号中的
'\n'
,但我根据Bash 3.2.39(1)(是的,有点旧)上的测试将它们取出来。

逐行读取文件,并将读取的数据附加到variable@AvinashRaj-我承认我的例子不准确。省略号表示前一行和后一行之间的内容。在我看来,这个问题很清楚,因为我没有收到错误的feedabck。您的预期输出显示了您的需要,但是
如何在bash中将具有多行的文件转换为具有\n个字符的字符串行显示不同的内容。如果这似乎不起作用,请仔细检查文件的行结尾。通过首先通过
dos2unix
运行文件,可以断言行结尾是unix友好的。oneliner解决方案看起来像:
cat文件| dos2unix | awk'$1=$1'或'\\n'/dev/stdin
这就是我需要的!只是一个更正。。。它应该是\\n而不是\n。要不然就不行了。。因此它变成了==>echo“${cert/$'\n'/\\n}”@Macindows对我来说是双向的,但我根据您的反馈添加了第二个反斜杠。我仍然在这里使用Bash3.2.57(1)(MacosCatalina股票)。谢谢
cert=$(cat file)
echo "${cert//$'\n'/\\n}"