星期三, 十一月 14, 2007

利用shell来提高工作效率『转』

1、查找定位技巧
在C语言基础训练中,往往会借鉴Linux源代码,于是少不了查找。Windows下面有source
insight,Linux也有相应的工具。但是,如果仅仅是查找一个宏的定义方式,比如ARRAY_SIZE,则只需要一行shell命令就可以了。举
例如下:




[armlinux@lqm interview]$ find /usr/include -name "*.h" | xargs grep -n "[[:blank:]]ARRAY_SIZE"
/usr/include/libiberty.h:327:#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
[armlinux@lqm interview]$

或者




[armlinux@lqm interview]$ find /usr/include -name "*.h" | xargs grep -n "\<ARRAY_SIZE"
/usr/include/libiberty.h:327:#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
[armlinux@lqm interview]$

这样的定位信息还是比较准确的,不过对于匹配模式需要精心设计。
这里有两个比较好的习惯。

(1)find和xargs组合使用。

使用xargs工具作为筛选器,可以充分利用从find命令挑选的输出。find运行通常提供与某些条件匹配的文件列表。此列表被传递到xargs上,后者然后使用该文件列表作为参数来运行其他某些有用的命令。这与不使用xargs是完全不同的。

(2)停止对cat使用管道。

grep的一个常见的基本用法错误就是通过管道将cat的输出发送到grep以搜索单个文件的内容。这绝对是不必要的,纯粹是浪费时间,因为诸如grep这样的工具接受文件名作为参数。您根本不需要在这种情况下使用cat。

这两个习惯是《Unix高手的10个习惯》中的。我以前犯过第二个错误,就是使用了cat然后grep,现在的这行shell操作则纠正了这个错误,效率上也有所提高。另外,还使用了grep的-n选项,实现了对匹配行的准确定位。以后在查找中就方便多了。

0 意見: