在日常开发中, 通常会写一些自动化的脚本, 特别是文本自动化的脚本经常写。 而linux commands 在完成自动化工作的作用特别大。
下面我会总结一下我使用过的Linux commands。
1. 文件查看命令: cat , more , less, tail 和 head 。 这几个命令都可查看一个文件, 但是功能略微不同。 cat 适合查看一个较小的文件。 more 和 less 可以自动分页, 所以适合查看比较大的文件, 并且提供了上一页和下一页的翻页功能。 tail 和 head 也是很常见的查看命令, tail 用于查看文件末尾, head 用于查看文件开头。
2. 文本编辑命令: sed, awk。 这两个命令在文本自动化工作方面赫赫有名。 sed 用于文本自动化的增删改查, sed最重要的功能就是基本正则表达式的文本替换。 awk 的侧重点则不同, awk的优势在于处理固定格式的文件, 如 csv。 awk 可以进行数据的 过滤, 聚集,如可以求和, 也可以求平均值, 适用于数据分析。如果要简单的实现一个对账系统, sed 和 awk 是一个很好的选择。
3. 其他文件编辑命令: cut, tr。 cut 用于提取文件中每一行的一部分字符串, 例如一个csv文件, 可以用cut 提取某一个field。 tr 可以进行文本的替换, 可以把tr当做低级版的sed。 如 tr "abc" "xyz", 这个命令就把字符串中的a 替换成 x, b 替换成 y, c 替换成 z
4. 文本比较命令: comm, diff。 comm 用于比较两个文件 common content 和 different content, 对账系统通常会用到这个命令。 diff 和 comm 很类似, 用于比较两个文件的不同之处, 通常可以用来作为文件的版本控制。
5. 文本的拆分和合并: split, csplit, join。 split 和 csplit 都可以用于拆分一个文件为若干个小文件。 split 可以基于文件大小拆分, csplit 可以基于正则表达式拆分。 join 类似于关系型数据库的join 操作, 把相同的行join 起来。
6. 与目录有关的命令: basename, dirname。 这两个命令接受的输入都是一个目录字符串, basename 返回文件名 , dirname 返回当前文件的目录。
7. 排序和去重: sort , uniq。 sort 用于文本的排序, 如获取某个目录下的最大文件, 就可以用sort。 uniq 则用于去重。
8. 统计单词数量: wc 用于统计文本单词数量 或者字符数量。
9. xargs:这个命令是非常强大的,通常跟find 或者grep 组合起来使用。 如要删除所有的log 文件 find -type f "*log" | xargs rm
10. 文件文本的搜索: find 和 grep。 文本搜索是非常常用的功能, find 支持搜索文件, grep 支持搜索文本。