GREP
GREP 用于行扫描,打印指定行
# 扩展正则表达式支持:
grep -E stream
egrep stream
# 只打印匹配部分:
grep -o 
# 扫描文件件中所有文件,-l 选项只打印文件名
grep -rl something ./*.txt
SED
SED = stream editer
# GNU sed
# Replace regExp1 with something
sed -r 's/regExp1/something/g' stream
AWK
AWK 逐行扫描文件并运行脚本。脚本的基本格式:
BEGIN{}
{}
END{}
BEGIN 语句块只在整个程序开始之前运行一次。中间的主语句块将会针对每一行运行一次。末尾的 END 语句块在程序运行结束前运行一次。 AWK 语法与 C/C++ 类似。每条语句末尾分号分隔。
- 支持 
+-*/%^ ++ --运算符 - 正则表达式放置在 
/中,如/regExp/, 测试是否匹配:$1~/regExp/ - 支持 C 风格 
if,for,which,while循环,以及for(i in expr){}循环 
内置变量
AWK 中变量默认不需要 $ 符号调用。
| Var | Means | 功能 | 
|---|---|---|
| $0 | 当前行 | |
| $1~$n | 当前行第 n 个域 | |
| FS | Field Seprator | 域分隔符 | 
| NF | Number of Fields | 当前行域数目 | 
| NR | Now Record | 当前行号,(多文件)总行号 | 
| FNR | File Now Record | (多文件)当前文件行号 | 
| ENVIRON | 
内置函数
gsub sub substr index length match split sprintf strtonum tolower toupper
atan2 cos sin exp log sqrt int rand srand print
正则表达式
- 正则表达式用于匹配一个特定的字符串。
 - 没有任何标记的字符串,如 
apple是一个正则表达式,匹配这个单词本身。 - 本文基本遵循 GNU ERE 标准。各个工具开启 GNU ERE 标准的办法:
  
gerp -E,egrep,sed -E(MacOS, FreeBSD),sed -r(GNU),awk( 默认 ). - 务必确认工具支持正确的正则表达式标准,否则最基础的语法也会不兼容!
 
元字符
| 元字符 | 匹配目标 | 
|---|---|
| . | 除换行符外任意字符 | 
| \w | 字母(汉字)、数字、下划线 | 
| \s | 空白字符 | 
| \d | 数字 | 
| \b | 单词开始或结束 | 
| ^ | 字符串开始 | 
| $ | 字符串结束 | 
反斜杠可以给字符转义。
反义
| 元字符 | 匹配目标 | 
|---|---|
| \W | 非字母(汉字)、数字、下划线 | 
| \S | 非空白字符 | 
| \D | 非数字 | 
| \B | 非单词开始或结束 | 
[^xyz] | 
      非 x, y, z | 
重复
分组或单个字符之后跟随重复标志,说明其重复次数。
| 标志 | 次数 | 
|---|---|
| * | [0,inf) | 
| + | [1,inf) | 
| ? | [0.1] | 
| {n} | n | 
| {n,} | [n,inf) | 
| {n,m} | [n,m] | 
“或”条件分支
| 记号左右两边的表达式有一个匹配即可。如 abc|def 匹配 abc 或者 def。这个记号的优先级很低,但是可以结合小括号使用,如:
in=='(<|>)' 匹配 in=='<' 或 in=='>'
分组与字符类
- 小括号内的正则表达式部分建立一个分组。
    
- PRE 标准中,小括号中的部分自动获得一个数字编号,之后可以用反斜杠引用。 如 
(=)\1匹配==。ERE 标准不一定支持该特性。 
 - PRE 标准中,小括号中的部分自动获得一个数字编号,之后可以用反斜杠引用。 如 
 - 方括号里列出的字符构成字符类,匹配方括号中的任一字符。
 - 字符类中可以使用范围制定,如 
[0-9a-zA-Z]代表数字与字母。 - 大括号用于标识重复次数。