linux命令使用小记3


感叹一下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

两者合起来可以做分组统计,用起来还是挺简单的。