bash利用!!使用上一次的命令并快捷修改特别长命令中的错误(如拼写错误)
场景
如果打了一个特别长的命令,里面有一个小的拼写错误,难道需要重新定位编辑么?
解决方案
可以用向上的方向键来重新选,更方便的运行history然后选择相应命令序列号如!1314来重新运行,最特殊的就是!!直接运行上一次的命令。
在!!或者!1314之后加一个冒号,然后类似于sed的替换表达式来对命令进行修改运行。
user@ubuntu:~$ ls -M
ls: invalid option -- 'M'
Try 'ls --help' for more information.
user@ubuntu:~$
user@ubuntu:~$ !!:s/M/l/
ls -l
...
讨论
- 如果需要对所有的模式匹配位置进行修改,需要在!!:和后面的第一个s之间加一个g。为什么g要写在 s 前,而不是像 sed 语法那样出现在 s 之后 呢?这是因为任何出现在闭合斜线(closing slash)后的内容都会被 视为要追加到命令后的新文本,要想再次执行命令时添加其他参数, 这种写法很方便,就是如下所示在后面跟着的参数就会添加在修改后的命令末尾。
user@ubuntu:~$ ls -M
ls: invalid option -- 'M'
Try 'ls --help' for more information.
user@ubuntu:~$
user@ubuntu:~$ !!:s/M/l/ file1
ls -l file1
...
- 而其实如果不需要添加参数的时候,只是进行模式匹配修改的话,最后一个/完全可以不加。