寻觅生命中的那一片浅草......

Bash 强大的History 命令

Bash的使用GUN readline库来处理用户输入,所以BASH也有emacs/vi 两种模式(主要是快捷键不同)(4DOS没有)

一般来说BASH缺省是emacs模式,如果想变成vi模式(如果你是vi用户)就可以了,然后你就可以用和vi一样的快捷键来编辑命令行了.(4DOS没有)

set -o vi

不好意思有点远了,接下来还是history命令方面


Emacs and Vi history 编辑快捷键:

Emacs 模式:

CTRL-p 历史列表上一个.

CTRL-n 历史列表下一个.

CTRL-r 向上搜索历史列表 (incremental search).

CTRL-s 向下搜索历史列表 (incremental search).

Meta-p 向上搜索历史列表 non-incremental search.

Meta-n 向下搜索历史列表using non-incremental search.

Meta-< 移动到历史列表顶端.

Meta-> 移动到历史列表末尾.

Vi 模式:

k 历史列表上一个.

j 历史列表下一个.

/string or CTRL-r 向上搜索历史列表(正则表达式).

?string or CTRL-s 向下搜索历史列表(正则表达式).

n  重复上次搜索(同方向)n次

N 重复上次搜索(反方向)n次

G 移动到历史列表第N行 (for example, 15G).

/*

* 题外话,linux/unix的系统设计原则是KISS,和M$系统不一样,两个系统理念完全相反。

* 同时M$一个公司控制,所以什么事情都大都是一个程序解决所有问题

* linux/unix系统,不是一个工具解决所有问题,是一个工具解决一个问题,多个工具融合解决复杂问题

* 所以大家的使用理念也不应该要求一样

* M$使大家变懒了,但是初学简单,两点间基本一条路,入门快,提高慢

* linux/unix相反,东西多,路子广,两点之间多条路径,入门慢,提高快

*/


History 扩展(太灵活了):

Event Designators:

! 开始历史命令代换.

!! 上一条命令.

!n 上n条命令.

!-n 当前命令行数-n.

!string 最近的以string开头的历史命令.

!?string? 最近的包含string的历史命令 (后一个 ? 可省).

^string1^string2^  快速代换,重复上条命令,用string2替换string1.

!# 重复当前已经输入的命令行.

Word Designators (word designators follow the event designators, separated by a colon):

0 命令行第0个参数(恩,和c/shell 相似,通常是命令的名字,不知道 c/shell?那当我没说).

n 命令行第n个参数.

^ 命令行第一个参数 (第二个单词)

$ 命令行最后一个参数.

% 上次?string?搜索匹配的单词.

x-y x-y的参数 (-y等价于0-y).

* 所有参数(就是不包括命令的名字).

x* 与x-$相同.

x- x到倒数地二个参数

.

Modiers (modiers follow word designators, separated by a colon):

h 删除所有后面的路径,只留下前面的

t 删除所有前面的路径,只留下后面的

r 删除后缀.xxx, 留下文件

e 删除文件名, 留下后缀

p 打印结果命令,但不执行(恩,测试功能)

q 防止代换参数被再次替换(Quotes the substituted words, escaping further substitutions.这是原文)

x Quotes the substituted words, breaking them into words at blanks and newlines.

s/old/new/ 字符串替换(正则表达式,又没听过?当我没说)

& 重复上次替换

g 在当前行的所有单词范围执行s或者&命令(正则…..,算了).

下面是例子

History expansion examples:

$ echo a b c d e (executes `echo ab c d e`)

a b c d e

$ echo !!:3-$ (executes `echo c d e`)

c d e

$ echo !-2:*:q (executes `echo ‘a b c d e’`)

a b c d e

$ echo !-3:1:2:4:x (executes `echo ‘a’ ‘b’ ‘d’`)

a b d

$ echo !-4:1-3:s/a/foo/:s/b/bar/:s/c/baz/

(executes `echo foo bar baz`)

foo bar baz

上面这些+小小的技巧+小g,应该能实现4DOS的所有功能了把?

什么?还是不成,那你不适合linux/unix

转载自:http://linux.chinaunix.net/bbs/viewthread.php?tid=1097119&extra=page%3D1

尚无评论

发表评论

2024年四月
« 5月    
1234567
891011121314
15161718192021
22232425262728
2930