分类: LINUX
2009-07-11 18:02:15
表13-7 替换和历史
事件指示者 |
含 义 |
! |
说明开始历史替换 |
!! |
重新执行上一条命令 |
!N |
重新执行历史清单中的第N条命令 |
!-N |
重新执行从当前命令往回数的第N条命令 |
!string |
重新执行最后一条以串string开头的命令 |
!?string? |
重新执行最后一条包含串string的命令 |
!?string?% |
重新执行历史清单中最近一条包含串string的命令行参数 |
!$ |
用上一条命令的最后一个参数作为当前命令行 |
!! string |
将string添加到上一条命令的最后并执行 |
!N string |
将string添加到历史清单中第N条命令的最后并执行 |
(续表)
事件指示者 |
含 义 |
!N:s/old/new/ |
在前面的第N条命令中,将第一次出现的old串替换成new串 |
!N:gs/old/new/ |
在前面的第N条命令中,将所有的old串替换成new串 |
^old^new^ |
在上一条命令中,用new串替换old串 |
Command !N:wn |
在当前命令后添加一个来自前第N条命令的参数(wn)并执行它。wn是一个从0,1,2,…开始的数,表明前面那个命令的第几个词。词0是命令本身,1是它的第一个参数等(请参见范例13-32) |
范例13-32
1 $ date
Mon Jul 12 12:27:35 PST 2004
2 $ !!
date
Mon Jul 12 12:28:25 PST 2004
3 $ !106
date
Mon Jul 12 12:29:26 PST 2004
4 $ !d
date
Mon Jul 12 12:30:09 PST 2004
5 $ dare
dare: Command not found.
6 $ ^r^t
date
Mon Jul 12 12:33:25 PST 2004
说明
1. 在命令行执行中UNIX/Linux的date命令。历史清单随之被更新,date成了清单中的最后一条命令。
2. !!(bang bang)从历史清单中取出最后那条命令,这条命令再次被执行。
3. 执行历史清单中第106条命令。
4. 执行命令清单中最后那条以字母d开头的命令。
5. 敲错了命令,应该是date,而不是dare。
6. 用脱字符在历史清单的最后那条命令中替换字母。命令中第一个r被替换为t。即dare改为date。
范例13-33
1 $ ls file1 file2 file3
file1 file2 file3
$ vi !:1
vi file1
2 $ ls file1 file2 file
file1 file2 file3
$ ls !:2
ls file2
file2
3 $ ls file1 file2 file3
$ ls !:3
ls file3
file3
4 $ echo a b c
a b c
$ echo !$
echo c
c
5 $ echo a b c
a b c
$ echo !^
echo a
a
6 % echo a b c
a b c
% echo !*
echo a b c
a b c
7 % !!:p
echo a b c
说明
1. ls命令列出file1、file2和file3。历史列表被更新,命令行被分解为若干个词,词的编号从0开始。如果在词的编号前加个冒号,就能将这个词从历史清单中提取出来。标记!:1的含义是:取出历史清单中最后那条命令的第一个参数,并用它替换掉命令串中的!:1。最后那条命令的第一个参数是file1(第0号单词是命令本身)。
2. !:2被替换为上一条命令的第2个参数,即file2,并且成为ls的参数。命令运行结果是打印出file2(file2是第3个单词)。
3. ls !:3的含义是:找到历史清单中的最后一条命令,取出该命令中第4个词,把它作为参数传给ls命令(file3是第4个词)。
4. 带美元符($)的感叹号(!)代表历史清单中最后那条命令的最后一个参数。此时这个参数是c。
5. 脱字符(^)代表命令后的第一个参数。后跟脱字符的感叹号(!)代表历史清单中最后那条命令的第一个参数。本例中最后那条命令的第一个参数是a。
6. 星号(*)代表命令后的所有参数。感叹号(!)后跟一个星号,代表历史清单中最后那条命令的所有参数。
7. 显示历史清单中最后一条命令,但不执行。历史清单被更新。现在可以对该行执行脱字符替换。