如何在csh中将变量分配给变量后保留命令输出的格式?

时间:2014-11-01 13:55:14

标签: shell logging freebsd csh

现在我想在freeBSD中记录所有用户的登录消息,所以我在freeBSD中输入last -f /var/log/utx.log来查看日志。

输出格式为: brandboat pts/1 xxx.xxx.xxx.xxx Sat Nov 1 11:28 still logged in brandboat pts/0 xxx.xxx.xxx.xxx Sat Nov 1 11:21 still logged in root ttyv0 Sat Nov 1 11:16 still logged in brandboat pts/1 xxx.xxx.xxx.xxx Sat Nov 1 11:11 - 11:25 (00:13)

我尝试将所有这些消息复制到变量中: set aaa= `last -f /var/log/utx.log` echo $aaa

输出是:

brandboat pts/1 xxx.xxx.xxx.xxx Sat Nov 1 11:28 still logged in brandboat pts/0 xxx.xxx.xxx.xxx Sat Nov 1 11:21 still logged in root ttyv0 Sat Nov 1 11:16 still logged in brandboat pts/1 xxx.xxx.xxx.xxx Sat Nov 1 11:11 - 11:25 (00:13)

正如您所看到的,它不会保留命令输出中的原始格式。如何将其保存在 csh

1 个答案:

答案 0 :(得分:0)

这是黑魔法,但它有效:

$ csh
% set g=`ls | sed -s ':a;N;$\\!ba;s/\n/\\n/g'`
% echo "$g"
% /bin/echo -e "$g"

我们的想法是使用\nsed更改换行符。我用trick来获取它。请注意,我必须双重转义标签!ba,告诉csh它不是一个事件。

您可以将ls替换为last -f /var/log/utx.log以检查它是否适合您。