【问题标题】:Bash reg-exp substitutionBash 正则表达式替换
【发布时间】:2008-08-26 14:37:31
【问题描述】:

有没有办法在 bash 的当前行上运行正则表达式字符串替换?

我发现自己经常遇到这样的情况,我输入了很长的命令行,然后意识到我想更改行中的某个单词。

我目前的做法是结束行,按Ctrl+A(到行首),插入#(注释掉行),按回车,然后使用^oldword^newword 语法(^oldword^newword 将旧字替换为新字后执行上一条命令)。

但必须有更好(更快)的方法来实现这一点。 (鼠标是不可能的,因为我大部分时间都在 ssh-sessions 中)。

可能有一些类似 emacs 的键命令,我不知道。

编辑:我尝试过使用 vi 模式。奇怪的事情发生了。虽然我是一个热爱 vim 的用户,但我在使用我心爱的 bash 时遇到了严重的麻烦。那些烙印在我潜意识里的手指动作突然停止了工作。我很快回到 emacs-mode 并考虑了一下,尝试将 emacs 作为我最喜欢的编辑器(虽然我猜,同样的事情可能会再次发生)。

【问题讨论】:

    标签: regex bash


    【解决方案1】:

    在 ksh 中,在 vi 模式下,如果您在命令模式下按“v”,它将在当前命令行的内容上生成一个完整的 vi 会话。然后,您可以使用所有 vi 命令(在您的情况下为全局搜索和替换)进行编辑。当 :wq from vi 时,执行编辑的命令。我确信 bash 存在类似的东西。由于 bash 倾向于扩展其前身,因此可能存在类似的东西。

    【讨论】:

    • 它确实也适用于 Bash,我想说,当你想用你当前的命令行做完整的“编辑器的东西”时,这是最好的答案。
    【解决方案2】:

    生日,

    改用 vi 模式怎么样?只需输入 set -o vi

    然后您可以转到要更改的单词,然后根据单词中的内容进行 cw 或 cW 吗?

    糟糕,忘记在命令历史记录的上一行添加您输入的 ESC k 到 o。

    你通常用什么做编辑器?

    干杯, 抢

    编辑:我在最初的回复中忘记说的是,您需要使用您在 vi 中处于“ex”模式时输入的命令来考虑 bash 中的 vi 命令行,即在您输入冒号。

    最糟糕的是,您需要使用古老的 vi 命令 h(向左)和 l(向右)来浏览命令历史。不过,您可以使用 w(或 W)在单词间反弹。

    不过,一旦你习惯了它,你就会拥有各种可用的命令,例如输入 ESC / my_command 将回顾你的历史,最近的一次,找到包含文本 my_command 的命令行的第一次出现。一旦找到了,您就可以使用 n 来查找下一个事件,等等。然后使用 N 来反转搜索的方向。

    我会去阅读 bash 的手册页,看看在 vi 模式下有什么可用的。一旦你克服了向上箭头和向下箭头被 ESC k 和 j 替换的事实,你会发现 vi 模式提供了比 emacs 模式更多的 bash 命令行编辑功能。

    恕我直言! (-:

    Emacs?八十兆,不断交换!

    干杯, 抢

    【讨论】:

      【解决方案3】:

      很遗憾,不,没有更好的方法。如果您只是厌倦了击键,您可以使用宏来修剪它们。将以下内容添加到您的~/.inputrc

      "\C-x6": "\C-a#\C-m^"
      "\C-x7": "\C-m\C-P\C-a\C-d\C-m"
      

      现在,在一个新的 bash 实例中(或在您当前的 shell 中按 C-x C-r 重新加载 .inputrc 之后),您可以执行以下操作:

      1. 输入虚假命令(例如,ls abcxyz)。
      2. 按 Ctrl-x,然后按 6。宏在行首插入 #,执行注释行,然后键入您的第一个 ^
      3. 输入您的更正(例如,xyz^def)。
      4. 按 Ctrl-x,然后按 7。宏完成替换,然后转到上一行(已注释),删除注释字符,然后再次执行。

      它不是很优雅,但我认为它是你使用 readline 可以获得的最好的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-24
        • 2015-01-24
        • 1970-01-01
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多