grep 正则匹配字符串
grep '[Aa]aa' filename
# 过滤出包含有Aaaa或者aaaa的一行
grep '[A-Z]' filename
# 包含至少一个大写字母的行
grep -w '[tT]est' filename 包含单词和test的行.
# force PATTERN to match only whole words
grep -s 'ken sun' filename
# 找到包含ken sun的行, 但不打印行, 而是用来检查退出状态.
# -s, --no-messages suppress error messages 相当于静默模式
grep -v aaa filename
# 打印不包含aaa的行.
grep -l 'dear cathy' *
# 打印包含dear cathy的文件的文件名清单.
grep -n tom file
# 打印匹配的行并追加行号.
egrep 正则匹配字符串
# egrep = grep -E 可以使用基本的正则表达外, 还可以用扩展表达式.
# 注意二者之间的区别.
egrep '(ab)+' filename
# 包含至少一个ab的行.
egrep 'aaaa+' filename
# 包含至少四个a的行
# + 匹配一个或者多个先前的字符, 至少一个先前字符? 匹配0个或者多个先前字符.
egrep 'x[0-9]?' filename
# 包含x或者x后面跟着0个或者多个数字的行.
egrep '(TOM|DAN) SAVAGE' filename
# 包含 TOM SAVAGE 和DAN SAVAGE的行.
# () 字符组, 如: love(able|ers) 匹配loveable或lovers.
egrep '[A-Z]...[0-9]' filename
# 有五个字符, 第一个式大写, 最后一个是数字的行.
awk 正则匹配提取字符串
awk -F"[@ /t]" '{print $2,$3}' test
# 以@,空格,Tab键分割test文件的每一行,并输出第二、第三列。
# -F指定分隔符,字符或字符串都可,划分字段
awk '$2~/^(126|yahoo)/{print $2, $3}' test
# 如果改行的第二个字段以"123"或"yahoo"开始,则输出改行的第二、第三列。
awk '$1~/[0-9][0-9]$/{print $1, $3}' test
# 如果改行的最后两个字段以数字结束,则输出改行的第一、第三列。
awk '$2 == "gmail.com"{$1 = "ggg";print}' test
# 输出test文件中第二个字段是"gmail.com"的行,
# 并把改行第一列改为"ggg",并不能修改test文件内容
awk '$2 == "gmail.com"{$1 = "ggg"}{print}' test
# 输出test文件中所有行,并且如果第二个字段是"gmail.com",
# 把改行第一列改为"ggg",和上边那个的区别:
# 主要就是这个输出所有行上边那个只输出第一个字段
awk '{IGNORECASE=1;if($2 ~/^[a-z]/&& $2~/net$/){print $0}}' test
# 打开test文件,忽略字母大小写,如果第二字段以[a-z]开头,
# 并以"net"结尾,则输出该行。
参考推荐: