Bash历史记录:正确/用替换重复最后一条命令

时间:2020-01-09 10:37:22  来源:igfitidea点击:

我经常在Linux bash shell下键入以下错误命令:

rsync -av dir1 [email protected]:/path/to/dir1

或者

cp -av file1*.txt file2*.txt /path/to/dest

我需要按以下步骤纠正这些命令:

rsync -av dir5 [email protected]:/path/to/dir1 
cp -av delta1*.txt delta2*.txt /path/to/dest 

如何将dir1替换为dir5或将文件替换为delta,并在bash shell下重复最后一个命令?

bash shell支持历史记录搜索和替换操作。

bash(以及许多其他现代)shell提供了对命令历史记录(先前键入的命令列表)的访问。

bash shell支持在其他shell(例如csh)中发现的历史记录扩展功能。

语法:Bash历史记录搜索并替换命令参数

快速替换的语法如下,并重复最后一个命令,将word1替换为word2:

^WORD1^WORD2^

或者

!!:s/WORD1/WORD2

或者

!!:gs/WORD1/WORD2

在此示例中,我试图将名为youtube-demo-andriod-app-part1.avi的文件复制到/backup目录

$ cp youtube-demo-andriod-app-part-102.avi /backup/

要用替换重复最后一个命令:

$ ^102^1002^

或者

$ !!:s/102/1002

输出示例:

cp youtube-demo-andriod-app-part-1002.avi /backup/

请注意,此替代仅适用于第一次出现。
例如:

$ cp -av file1*.txt file2*.txt /path/to/dest

用delta1和delta2替换file1和file2,输入:

!!:gs/file/delta

输出示例:

cp -av delta1*.txt delta2*.txt /path/to/dest

您还可以使用&重复之前的替换操作:

cp -av file1*.txt file2*.txt /path/to/dest
!!:gs/file/delta-&/

输出示例:

cp -av delta-file1*.txt delta-file2*.txt /path/to/dest