在变量中保存 linux 命令的结果时,我想将换行符更改为字符串

I want to change newline to a string when saving the result of a linux command in a variable

我正在尝试编写一个 shell 脚本来读取 linux 的系统配置状态并将结果保存为 CSV。

要保存的结果是主机名、设置标准ID和实际设置值。

保存为 csv 时最有问题的部分是换行符。

例如,

#!/bin/bash
hostname='linux01'
id='SRV-01'
result="*result*\n"
result=$result`cat /etc/passwd | head -n 5`

echo "$hostname, $id, $value" >> test.csv

当存在上述脚本时,CSV 格式因换行而被破坏。

当脚本结果如下

linux01, SRV-01, *result*
root:x:0:0:root:/root:/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

我想将此更改保存到 csv 文件。

linux01, SRV-01, *result*\nroot:x:0:0:root:/root:/bin/zsh\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin: /bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync

首先,我用sed作为测试,把\n改成了\\n,但是用echo输出的时候,\n字符串变成了换行符。

echo `cat /etc/passwd | head -n 5 | sed -z 's/\n/\\n/g'`

在变量中保存为\n字符串,但在echo中判断“\n”变为0x0a

请问是否有办法将回显输出更改为字符串“\n”而不是换行符。

您可以替换换行符。

echo "$hostname, $id, ${result//$'\n'/\n}" >> test.csv