sed - 用于查看日志并替换输出中某些字符的别名
问题描述
我需要在 .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'"
谢谢。
解决方案
即使用反斜杠转义单引号,也不能嵌套单引号。
一种解决方法是:
- 一旦用单引号关闭子字符串。
- 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"'\'
(可能有一些具体的原因......)
希望这可以帮助。
推荐阅读
- html - 如何获取图像的旋转角度值
- google-bigquery - 如何正确使用变量 ARRAY
> - vue.js - 除一个 Vue.js 之外的所有字段的表单重置
- sql - 如何在 Oracle SQL 中选择上个月登录并在 8 月之前的一个月中记录最少 1 次的行?
- jenkins - Jenkins 管道:没有找到这样的 DSL 方法“withNPM”
- amazon-web-services - 将行级权限标签配置添加到数据集
- python - 如何在 Gnu/Linux 中使用纯 Python 将文本放入剪贴板?
- apache-spark - 为什么我的 xml log4j 不会将 Spark 应用程序日志保存在输出文件中?
- python - 为什么函数 __name__ 返回包装函数名称而不是代码所在的函数名称?
- javascript - 尝试查找对输入表单的响应时,getElementById 始终返回 null