首页 > 解决方案 > 用于查看日志并替换输出中某些字符的别名

问题描述

我需要在 .bashrc 中创建一个别名,以每 1000 秒打印一次日志的最后十行,并在输出中替换一些字符(每个“\s”用一个空格)。

我正在结合两个不同的别名:

alias watch10='watch '

alias dcr='-n 1000 \'tail -10  some.log | sed "s/\\s/\ /g"\''

将别名添加到 .bashrc 后,我运行“source .bashrc”并且没有出现错误。

日志行如下所示:

somestuff /B/R/Joe\sPaul\s-\sMike\s-\sSteve

我希望输出行是:

somestuff /B/R/Joe Paul - Mike - Steve

我通过组合两个别名在 ssh 中调用命令:

watch10 dcr

这会产生一个错误:

sh: 1: dcr: not found

解决办法是什么?

请注意,当我使用此别名(而不是 dcr)时,它不会尝试用单个空格替换烦人的“\s”:

alias dc="-n 1000 'tail -10  some.log'"

谢谢。

标签: sedpipewatch

解决方案


即使用反斜杠转义单引号,也不能嵌套单引号。

一种解决方法是:

  • 一旦用单引号关闭子字符串。
  • Put\'代表文字单引号。
  • 然后用单引号重新启动剩余的子字符串。

例如,您可以打印“就是这样”。和:

echo 'That'\''s it.'

不用说,如果适用的话,用双引号将整个字符串括起来会更容易。

回到您的问题,请尝试:

alias dcr='-n 1000 '\''tail -10 some.log | sed "s/\\\s/ /g"'\'

请注意,您需要另一个反斜杠来逃避\s

但是为什么不将两个别名合并为一个:

alias dcr='watch -n 1000 '\''tail -10 some.log | sed "s/\\\s/ /g"'\'

(可能有一些具体的原因......)

希望这可以帮助。


推荐阅读