如何一步将“8”替换为“7”?

如何一步将“8”替换为“7”?

在Linux终端中,我最初输入了以下命令:

tail -n +80 numbers.txt

在意识到我犯了一个错误并且实际上想使用+70而不是+80之后,我想纠正它。为此,我将光标移动到数字“8”,然后输入“7”,在“8”之前插入“7”,结果是“780”。为了达到“70”,我需要删除“8”。然而,这个过程对我来说似乎很慢。有没有办法直接一步将“8”替换为“7”,就像简单地将“8”替换为“7”一样?

答案1

在 Bash 中,如果您启用了历史扩展(默认情况下启用,尽管有些禁用它),那么输入^old^new将重新运行应用了替换的最后一个命令(我认为它是缩写!:s/old/new/或其他内容)。因此,在您的情况下,^8^7甚至无需使用箭头键浏览整个命令。

键入一个新的 tail -n +70命令并按Alt.插入上一个命令的最后一个参数可能比编辑上一个命令更快。同样,也tail -n +70 $_应该这样做。

(对于更复杂的更改:按CtrlxCtrle将打开默认编辑器 ($VISUAL),您可以在其中编辑命令并立即提交。)

答案2

假设您使用的是 bash,覆盖模式默认情况下被禁用并且不绑定到任何快捷方式:

切换覆盖模式。使用显式正数字参数,切换到覆盖模式。使用显式非正数字参数,切换到插入模式。该命令仅影响emacs 模式;vi模式确实以不同的方式覆盖。每次调用都以readline() 插入模式开始。

在覆盖模式下,字符必然会self-insert替换该点的文本,而不是将文本推到右侧。字符必须backward-delete-char用空格替换点之前的字符。

缺省情况下,该命令未绑定。

您可以添加一个键绑定并启用它,然后在完成后再次禁用它,但我认为最好的办法是使用delete-char相反,默认绑定到Ctrld

删除该点处的字符。 [...]

光标位于 上后8,按Ctrld将其删除,然后输入 7。

vi模式,当已经在8<Esc>r7。或者可以使用<Esc>F8r7(从行尾开始)将光标移动到第一个8,然后将其替换为 来完成整个操作7

相关内容