Apache 在别名中使用带引号和转义字符的sed

Apache 在别名中使用带引号和转义字符的sed,apache,bash,sed,alias,profile,Apache,Bash,Sed,Alias,Profile,我有一个别名来查看我的apache错误日志,它使用sed将换行符格式化为换行符,以便更好地显示。以下命令在通过命令行输入时工作正常,但不能作为别名使用。每次运行此命令时,我都需要打开.profile文件,复制别名的内容,然后将其粘贴到命令行中 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 |

我有一个别名来查看我的apache错误日志,它使用sed将换行符格式化为换行符,以便更好地显示。以下命令在通过命令行输入时工作正常,但不能作为别名使用。每次运行此命令时,我都需要打开.profile文件,复制别名的内容,然后将其粘贴到命令行中

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'"
我尝试了许多方法,交换了引号字符,并大量尝试了转义字符。似乎我永远无法让我的别名使用sed搜索/替换(错误日志是尾随的,没有换行符格式)。我确信有一些琐碎的东西遗漏了,对此我很天真。我不是unix/linux专家


有人能告诉我为什么这个别名不起作用吗?

如果你做了
set-x
echo alias elog=..
alias elog
,或者让bash把结果写回给你,你就会明白为什么它不起作用了<双引号中的代码>\变为
\

经验法则是,如果你不得不问,你已经超出了别名的用处。改用函数:

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

这样,您就不需要任何额外的转义

如果在命令行中定义别名呢?也许这只是将其添加到
~/.bashrc
中,然后对其进行资源化的问题。在命令行中定义别名具有相同的效果(我首先将其从.profile中删除并重新进行了资源化):错误日志上的尾部将运行,但新行根本没有格式化。我不相信问题出在别名的定义上,在我几十次尝试修改别名的过程中,我每次都会使用“source~/.profile”。为了便于您的评论,我将其从.profile中删除并放置在.bashrc中,仍然具有相同的效果-尾部运行但没有格式。同样,在命令行上运行相同的命令,不带别名,也可以正常工作。您可以尝试使用
alias elog=“tail-f/var/log/httpd/my-sandbox-error\u log”sed-e's/\\n/\'$'\n/g'
?@damienfrancois谢谢,但没有骰子-仍然是相同的未格式化输出。(作为记录,我给别名起了一个稍微不同的名字,并在运行新别名之前做了“source~/.profile”)。。在这里工作(MacOS)如果你用换行符(一个简单的字符或单词)以外的东西替换,它工作吗?非常感谢!我所要做的就是添加一个额外的斜杠来表示转义字符(别名elog=“tail-f/var/log/httpd/my-sandbox-error\u log”| sed-e's/\\\n/\n/g'),它可以正常工作。