之前看过一篇文章《当我们 chmod 777 的时候,到底干了些什么?》,最近又想起来,让人不得不感叹前辈大神们的厉害,创造出如此多各样用途、各种使用方式的命令,以至于连文件权限 chmod 这样一种命令,都有这么多处理方式:
→ bash
bash-3.2$ chmod
usage: chmod [-fhv] [-R [-H | -L | -P]] [-a | +a | =a [i][# [ n]]] mode|entry file ...
chmod [-fhv] [-R [-H | -L | -P]] [-E | -C | -N | -i | -I] file ...
回到主题,在使用 Linux 的过程,我们最常用的操作命令可能就是对文本文件的处理了:find / grep / sort / cut / awk / sed / uniq / tee / tr / diff / cmp / split / xargs 等,每天都会用到诸如这些操作。所以,本期周刊将介绍命令行世界中最常用的文本处理命令——awk, sed, grep 三巨头,让它们带你初步领略命令行的强大。
0. 进入命令行世界
Linux 有哪些常见的使用命令,shell 编程有哪些常用的命令,无论你是菜鸟还是老鸟,@AlphaGooo 的两篇归纳整理,总是可以用得到。而在第三篇中,引入今天的主题,作者甚至称 sed 和 awk 为“Linux 系统的两个神级工具”。
1. awk
AWK 是一门解释型的编程语言,在处理文本文件时,它又是非常强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho, Peter Weinberger 和 Brian Kernighan 的姓氏首字母。
简单的,可以直接理解为「awk 是一个数据处理工具」,倾向于将一行文本分成数个“字段”来处理,适合小型数据的处理。
一篇基础介绍,一篇译自著名的《AWK Tutorial》的全面学习指南,再几篇使用案例,再好不过。
2. sed
SED 的英文全称是 Stream Editor,本质上是一个编辑器,但是它是非交互式的,这点与 VIM 不同;同时它又是面向字符流的,输入的字符流经过 SED 的处理后输出。这两个特性使得 SED 成为命令行下面非常有用的一个处理工具。
SED 也是一个管道命令,可以分析 standard input 的,主要是用来分析关键字的使用、统计等,此外还可以将数据进行替换、删除、心中、选取特定行等功能。区别于 AWK,你可以从它的这几种典型用途中看出:文本替换、选择性的输出文本文件、从文本文件的某处开始编辑、无交互式的对文本文件进行编辑。
3. grep
globally search a regular expression and print(以正规表示法进行全域查找以及打印),
g/re/p
。在给出文件列表或标准输入后,它会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本。
关于 grep,一个有 40 年历史的 Unix 命令 // GitCafe
“在我公开 grep 这个命令之前的很长一段时间里它都是我的私有命令。” Unix 的创造者 Ken Thompson,也是 grep 的作者。该文讲述了一段过往历史,在 grep 的发明背后,fgrep 和 egrep 的等修改版一直在被人使用,却甚少有大众知道。
Linux 基础命令介绍五:文本过滤 grep // vvpale
作者的这个 Linux 基础命令介绍系列,非常值得阅读,基本每一块都做到了非常详细地步骤化解说,简直 excited!
4. 彩蛋:你不知道的有趣命令
接下来,我们会陆陆续续推出好几期关于 Linux 命令行的主题周刊,也将在每期都增加一部分好玩的知识了解,本期是「有(wu)趣(yong)的命令」:screenfetch、fortune、toilet、ddate、sl……炫酷无敌,可是…哈哈哈哈哈哈哈。
(本期完)
# SegmentFault 技术周刊 #
「技术周刊」是社区特别推出的技术内容系列,一周一主题。周刊筛选的每篇内容,是作者的独到见解,踩坑总结和经验分享。