感叹一下linux的命令真的是博大精深啊,刚装好的系统就有几千的命令。如果要全学真的不知道要花多少时间。
另外,深切感受到linux的shell对工作的帮助,大部分任务shell中就可以完成了,不需要windows中所谓小工具的东西,对工作效率的提高很有作用。
回到主题,下面说下最近学到的linux命令。
grep -s and -l
$ grep -s foo no_such_file $ grep -l foo *.java foo.java foo2.java
-s 参数的作用是在没有找到文件时不报错
-l 参数的作用是只显示文件名
grep -r –include and ack
$ grep -r --include="*.java" foo // omit $ ack --java foo // omit
以前我在工程目录中递归查找含有指定字符串的文件时用的是find+xargs+fgrep,最近想起来可以用-r –include,再者经别人提醒后可以用ack(ubuntu上包名为ack-grep),突然发现原来搜索是那么简单(ack)。
sed regular expression group capture
$ tail some_file (a,b,c) (e,f,g) (h,i,j) $ tail some_file | sed -nr "s/.*,([^)]*)\)$/\1/p" c g j
用sed做正则表达式分组内容提取。简单说一下分组提取的要点。一个是sed需要-r,否则不能执行\1。其次,分组是正则表达式本来就有的东西,sed使用\1等表示第几个分组。s是必须的,因为这被认为是替换操作。
sort and uniq -c
$ cat my_file a b a $ cat my_file | sort | uniq -c 2 a 1 b
两者合起来可以做分组统计,用起来还是挺简单的。