2013-10-16 83 views
2

我有一个别名来查看我的apache错误日志,它使用sed将换行符格式化为换行符以更好地显示。以下命令在通过命令行输入时工作得很好,但不会作为别名工作。每次我运行这个时,我需要打开我的.profile文件,复制别名的内容,并将其粘贴到命令行中。在引号和转义字符的别名中使用sed

tail -f /var/log/httpd/my-sandbox-error_log | sed -e 's/\\n/\n/g' 

别名:

alias elog="tail -f /var/log/httpd/my-sandbox-error_log | sed -e 's/\\n/\n/g'" 

香港专业教育学院尝试了许多方法,已经换了引号字符,并与转义字符a'plenty实验。似乎我永远不能让我的别名使用sed搜索/替换(错误日志已尾,没有换行格式)。我确定有一些微不足道的东西,我很天真。我不是一个Unix/Linux专家。

任何人都可以启发我为什么这不作为别名工作?

+0

如果您在命令行中定义了别名,该怎么办?也许只是把它加到你的'〜/ .bashrc'然后找到它。 – fedorqui

+0

在命令行中定义别名具有相同的效果(我首先将其从我的.profile中移除并重新获得它):我的错误日志上的尾部运行,但换行符未被格式化。我不认为这个问题出现在定义别名的地方,而且我试图用别名来摆弄数十次的每一次“source〜/ .profile”。为了您的评论,我将它从.profile中移除并放置在.bashrc中,并且仍然具有相同的确切效果 - 尾部运行但没有格式化。再次,在命令行上运行相同的命令,没有别名,按预期工作。 – Todd

+0

你可以试试'alias elog =“tail -f/var/log/httpd/my-sandbox-error_log | sed -e's/\\ n /'$'\ n/g'”'? – damienfrancois

回答

5

如果您确实使用了set -x,echo alias elog=..,alias elog或以其他方式将结果写回给您,您会看到它为什么不起作用。 \\用双引号变为\

经验法则是,如果你必须问,那么一个别名不是你想要的。改用功能:

elog() { 
    tail -f /var/log/httpd/my-sandbox-error_log | sed -e 's/\\n/\n/g' 
} 

这样你就不需要任何额外的转义。

+0

非常感谢!我所要做的只是添加一个额外的斜线来表示escape char(别名elog =“tail -f/var/log/httpd/my-sandbox-error_log | sed -e's/\\\ n/\ n/g'“),并按预期工作。 – Todd