代码之家  ›  专栏  ›  技术社区  ›  Mo.

bash reg exp替换

  •  4
  • Mo.  · 技术社区  · 16 年前

    有没有方法在bash的当前行上运行regexp字符串replace?

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

    我现在的方法是完成任务,按 Ctrl键 + (要到达行的开头),请插入一个(要对行进行注释),按Enter键,然后使用 ^oldword^newword 语法( ^旧词^新词 在用newword替换oldword之后执行上一个命令)。

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

    可能有一些Emac,比如键命令,我不知道。

    编辑:我试过使用vi模式。发生了一些奇怪的事。虽然我是一个可爱的vim用户,但我使用我心爱的bash时遇到了严重的问题。所有那些在我潜意识里燃烧的手指动作突然停止了工作。我很快回到Emacs模式并考虑了一下,让Emacs作为我最喜欢的编辑器进行了一次尝试(尽管我猜,同样的事情可能会再次发生)。

    3 回复  |  直到 16 年前
        1
  •  1
  •   lurscher    16 年前

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

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

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

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

    它并不完全优雅,但我认为它是你最好的阅读线。

        2
  •  3
  •   jj33    16 年前

    在ksh中,在vi模式下,如果在命令模式下单击“v”,它将在当前命令行的内容上生成完整的vi会话。然后,您可以使用全范围的vi命令进行编辑(在您的情况下,使用全局搜索和替换)。当:wq来自vi时,执行编辑的命令。我相信bash也有类似的东西。因为bash倾向于扩展它的前辈,所以可能有类似的东西。

        3
  •  3
  •   Rob Wells    16 年前

    G'Day.

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

    然后你可以转到你想改变的单词,根据单词中的内容来做一个连续波或连续波?

    哎呀,忘了在命令历史记录的前一行输入esc k to o。

    你通常用什么做编辑?

    干杯, 抢劫

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

    最糟糕的是,您需要使用古老的vi命令h(向左)和l(向右)在命令历史中移动。不过,您可以使用w(或w)在单词之间来回跳跃。

    一旦你习惯了它,你就可以使用各种各样的命令,例如,输入esc/my_命令将回顾你的历史,最新的第一次,找到包含my_命令文本的命令行的第一次出现。一旦它发现了这一点,您就可以使用n来查找下一个事件,等等,然后使用n来反转搜索的方向。

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

    我不客气!(-)

    Emacs?八十兆,不断地交换!

    干杯, 抢劫