用于查看日志并替换输出中的某些字符的别名
Alias to watch a log and replace some characters in output
我需要在 .bashrc 中创建一个别名,以每 1000 秒打印一次日志的最后十行,并在输出中替换一些字符(每个“\s”为一个 space)。
我正在合并两个不同的别名:
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”替换为单个 spaces:
alias dc="-n 1000 'tail -10 some.log'"
谢谢。
即使用反斜杠转义也不能嵌套单引号。
解决方法是:
- 用单引号关闭子字符串。
- 输入
\'
表示文字单引号。
- 然后用单引号重新开始剩余的子字符串。
例如,您可以使用以下方式打印 "That's it.":
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"'\'
(可能有一些具体原因...)
希望对您有所帮助。
无法连接别名。别名替换仅在简单命令的第一个标记上执行。当您键入 'alias1 alias2' 时,假设 alias1=cmd1 alias2=cmd,代码将执行 'cmd1 alias2'(alias2 假定为文字参数)。
这个问题做的假设很少,我无法在 Mint19 上验证
- 将 2 个别名(watch10、dcr)放入 .bashrc 有效:Mint19 生成“未终止的引用字符串”)。
- 同样将 dc 设置为 '-n 1000 'tail -10 some.log'" 并将其与 'watch10 dc' 一起使用。我相信这将导致 运行 宁 'dc' (/usr/bin/dc) 程序(基本计算器),而不是采用 dc 选项。
几个选项:
如果您希望其他程序使用 'dcr' 命令(在本例中为 watch
),请编写一个小脚本,并将其放在 PATH 中引用的个人文件夹中(例如〜/ bin)。请注意,使用脚本将简化设置“\s”替换的过程。
替代方法是创建组合 'wdcr' 别名,组合为 'watch -n 1000 \'tail -10 some.log ...`。
- 运行 通过 ssh
当您使用命令 运行 '.ssh' 远程主机时,它被视为登录会话,而不是交互式会话。它将来源'~/.bash_profile'。除非配置文件脚本引用 ~/.bashrc,否则您不会在远程会话中获得别名。
另请注意,bash 强烈反对除交互式会话之外的任何别名,支持函数。
我需要在 .bashrc 中创建一个别名,以每 1000 秒打印一次日志的最后十行,并在输出中替换一些字符(每个“\s”为一个 space)。
我正在合并两个不同的别名:
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”替换为单个 spaces:
alias dc="-n 1000 'tail -10 some.log'"
谢谢。
即使用反斜杠转义也不能嵌套单引号。
解决方法是:
- 用单引号关闭子字符串。
- 输入
\'
表示文字单引号。 - 然后用单引号重新开始剩余的子字符串。
例如,您可以使用以下方式打印 "That's it.":
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"'\'
(可能有一些具体原因...)
希望对您有所帮助。
无法连接别名。别名替换仅在简单命令的第一个标记上执行。当您键入 'alias1 alias2' 时,假设 alias1=cmd1 alias2=cmd,代码将执行 'cmd1 alias2'(alias2 假定为文字参数)。
这个问题做的假设很少,我无法在 Mint19 上验证
- 将 2 个别名(watch10、dcr)放入 .bashrc 有效:Mint19 生成“未终止的引用字符串”)。
- 同样将 dc 设置为 '-n 1000 'tail -10 some.log'" 并将其与 'watch10 dc' 一起使用。我相信这将导致 运行 宁 'dc' (/usr/bin/dc) 程序(基本计算器),而不是采用 dc 选项。
几个选项:
如果您希望其他程序使用 'dcr' 命令(在本例中为 watch
),请编写一个小脚本,并将其放在 PATH 中引用的个人文件夹中(例如〜/ bin)。请注意,使用脚本将简化设置“\s”替换的过程。
替代方法是创建组合 'wdcr' 别名,组合为 'watch -n 1000 \'tail -10 some.log ...`。
- 运行 通过 ssh
当您使用命令 运行 '.ssh' 远程主机时,它被视为登录会话,而不是交互式会话。它将来源'~/.bash_profile'。除非配置文件脚本引用 ~/.bashrc,否则您不会在远程会话中获得别名。
另请注意,bash 强烈反对除交互式会话之外的任何别名,支持函数。