【发布时间】:2022-01-12 09:07:37
【问题描述】:
我正在尝试编写一个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”而不是换行符。
【问题讨论】: