免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 32625 | 回复: 51

Bash 强大的History 命令 [复制链接]

论坛徽章:
0
发表于 2009-04-14 18:29 |显示全部楼层
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到倒数地二个参数
.
Modi ers (modi ers 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

[ 本帖最后由 platinum 于 2009-4-15 07:24 编辑 ]

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 2009-04-14 18:44 |显示全部楼层
不错,支持,收藏先

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
发表于 2009-04-14 18:54 |显示全部楼层

history我还真很少这么用
一般就是history加grep使用

论坛徽章:
0
发表于 2009-04-14 22:51 |显示全部楼层

回复 #1 phantomblue 的帖子

小技巧 ~ -

论坛徽章:
0
发表于 2009-04-14 23:40 |显示全部楼层
不错,了解一下~~~~~~

论坛徽章:
0
发表于 2009-04-15 07:19 |显示全部楼层
LZ强悍滴很!

不错不错
我常用的无非就是history和history -c
偶尔用用ctrl+r然后翻翻以前命令。

论坛徽章:
0
发表于 2009-04-15 07:25 |显示全部楼层
CU 真是个卧虎藏龙的地方……

论坛徽章:
0
发表于 2009-04-15 11:20 |显示全部楼层
楼主翻译的不错啊,呵呵,辛苦了

论坛徽章:
0
发表于 2009-04-15 19:27 |显示全部楼层
ctrl+r非常有用。

论坛徽章:
0
发表于 2009-04-16 17:06 |显示全部楼层
收藏学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP