【问题标题】:I want to change newline to a string when saving the result of a linux command in a variable将linux命令的结果保存在变量中时,我想将换行符更改为字符串
【发布时间】: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”而不是换行符。

【问题讨论】:

    标签: bash shell script


    【解决方案1】:

    您可以替换换行符。

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

    【讨论】:

    • 感谢您的回答。这就是我想要的结果。我还有一个问题。 ${result//$'\n'/\\n} 这是我见过的第一个语法。我想知道语法的名称?我想了解更多相关信息。
    猜你喜欢
    • 1970-01-01
    • 2022-06-27
    • 2018-04-24
    • 2018-10-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2014-02-25
    相关资源
    最近更新 更多