|||
最近在看fortran的源码,尝试了一些很有意思的linux下的命令或工具,现罗列出来与大家分享。
首先在你的.bashrc下设置这样的语句,这样查看出来的关键字是红色字体,比较醒目:
# for grep
alias grep='grep --color=auto'
1.在查看一些命令的帮助文件时,你可能想知道哪些参数是大小写不敏感的(case insensitive),比如find命令,那么你可以这样 man find | grep -3n case,这个3是打印其中一个case关键词的上下3行,n是打印出关键字所在的行数。
2.查看当前目录下文件的个数:
find . -type f | wc -l
.代表当前路径,也可以指定绝对或相对路径。
3.删除当前目录下除某种后缀名以外的其它文件,比如当前目录下有大量的.11o、.12o、.11n、12n、.sp3等格式的文件,我只想保留.sp3格式的文件,可以这样做:
rm `ls | grep -v ".sp3"`
NOTE: ls左上角和上面命令最右上角的是tab键上面的符号。
4.我在读fortran77源码的时候遇到这样一个问题,比如我有个main.f程序调用test和test1两个subroutine,而test和test1这两个subroutine同时定义在了test.f程序里,如果文件很多的话 我想查看test1是如何定义的是件很麻烦的事情,因为谁也不知道test1会定义在test.f里。
方法一)这时候可以用nm来获取,比如编译的时候将test.f编译在了类似libtest.a这样的静态库里,那么:
nm -a libtest.a > temp
在生成的temp文件搜索test1,本例子会出现两个test1(main.o和test.o下),main.o下的test1前面有U参数,表示在main.o下被调用,但并没有定义;而test.o下的test1前面有T参数,表示在test.o下定义。
nm libnetcdf_linux.a | grep -in nf_open
方法二)一个很简单但很给力的方法,还是要用到grep工具,在当前目录下:
grep -i test1 *.f
-i参数是忽悠查找的参数的大小写,这样会将当前目录下所有文件出现test1的地方的对应的那一行打印出来,无论是引用还是调用,如果这还不能满足你,那么加上-n参数,即
grep -in test1 *.f
试试看吧,不光针对fortran程序,对于c、c++这样即使有头文件声明的,grep也照样发挥它强大的查找功能,如果你懒得去看头文件的声明的话。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-20 04:45
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社