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"结尾,则输出该行。

 

 

参考推荐

Linux cut 命令

Linux grep 多个关键字

Linux grep 正则表达式

Linux Shell 函数返回值

Linux 之 shell 比较运算符

SHELL学习笔记—-IF条件判断,判断条件

awk 简明教程

Linux awk 数组和循环

Linux awk 内置函数实例

Linux 抓取网页实例(shell+awk)

Linux shell 字符串操作详解

Linux shell 脚本常识和技巧

Shell 脚本的常用功能代码

5个超实用的 Shell 脚本

Linux ssh 命令原理详解

Linux shell 局部变量与全局变量

Linux Shell 生成随机数和随机字符串

Linux 15个命令,大幅提高工作效率