2013-10-16 24 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