【问题标题】:Using sed to replace all stdout from within .bashrc使用 sed 替换 .bashrc 中的所有标准输出
【发布时间】:2012-04-20 11:23:12
【问题描述】:

我想对我的 bash shell 中的所有输出执行 sed 操作。基本上我想把 sed 命令放在 .bashrc 中,这样它就可以“监听”某些关键字来处理它们。

例如,我希望在 .bashrc 中添加这样的内容:

sed ''/critical/s//$(printf "CRITICAL")/g''

因此,只要弹出“关键”一词,就会将其更改为“关键”。这可能是当我 cat 文件、使用 vi 或远程登录到另一个系统时。我需要做什么才能让它工作?

【问题讨论】:

  • 这会有各种奇怪的极端情况,例如:当你从“CRITICAL”中删除一个字符时,你想让它做什么?然后如果你把它加回来但大写怎么办?一个有趣的问题...
  • 另外,sed ''/critical/s//$(printf "CRITICAL")/g''sed s/critical/CRITICAL/g 应该有什么区别? (而且你的引用有点奇怪。)

标签: sed .bash-profile


【解决方案1】:

从 shell 执行此操作根本无法正常工作,因为许多命令需要直接访问终端和/或如果它们没有直接连接到终端(由于缓冲),它们的行为会有所不同。此外,虽然您可以强制重定向到文件(exec 没有命令),但您不能重定向到管道。

这样做的正确方法可能是使用类似于screen 中的exec 机制。

【讨论】:

    【解决方案2】:

    expect 可以在interact“模式”期间执行此操作。详情见the book

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 1970-01-01
      • 2019-02-02
      • 2015-01-08
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多