【问题标题】:Using sed in Alias with quotes and escape characters在 Alias 中使用带引号和转义字符的 sed
【发布时间】:2013-10-16 20:09:04
【问题描述】:

我有一个别名来查看我的 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 专家。

谁能告诉我为什么这不能用作别名?

【问题讨论】:

  • 如果在命令行中定义别名怎么办?也许只需将其添加到您的~/.bashrc 然后采购它。
  • 在命令行中定义别名具有相同的效果(我首先将它从我的 .profile 中删除并重新获取它):我的错误日志中的尾部运行,但换行符根本没有格式化.我不认为问题出在定义别名的位置,并且我为我尝试摆弄别名的数十次中的每一次都“提供了 ~/.profile”。只是为了您的评论,我将它从 .profile 中删除并放在 .bashrc 中,并且仍然具有相同的确切效果 - 尾部运行但没有格式化。同样,在命令行上运行相同的命令,没有别名,按预期工作。
  • 你可以试试alias elog="tail -f /var/log/httpd/my-sandbox-error_log | sed -e 's/\\n/\'$'\n/g'" 吗?
  • @damienfrancois 谢谢,但没有骰子 - 仍然是相同的未格式化输出。 (为了记录,我给别名起了一个稍微不同的名字,并在运行新别名之前做了“source ~/.profile”)
  • Pitty.. 在这里工作 (MacOS) 如果你用换行符(一个简单的字符或单词)以外的东西替换它,它工作吗?

标签: apache bash sed alias profile


【解决方案1】:

如果您执行了set -xecho alias elog=..alias elog 或以其他方式让 bash 将结果写回给您,您就会明白为什么它不起作用了。双引号中的\\ 变为\

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

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

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

【讨论】:

  • 非常感谢!我所要做的就是添加一个额外的斜杠来表示转义字符(别名 elog="tail -f /var/log/httpd/my-sandbox-error_log | sed -e 's/\\\n/\n/ g'") 并按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2013-02-24
  • 2011-11-22
  • 2023-04-01
相关资源
最近更新 更多