linux:正则表达式详解

grep用法小例:

示例数据存在ipaddr文件中,如下:

i8.208.102.12
80
中国 阿里云
高匿名
0.5ms
2021-03-13 18:40:19
8.133.191.41
8080
中国 阿里云
高匿名
 

命令举例如下: 必须用单引号''或者双引号""把grep的查询模式引起来,而且其中{}必须转意成\{ \}

cat ipaddr | grep "[0-9]\{4\}"     找出有4位数字的行


找出所有IP地址:注意:{} . () 都需要加“\”进行转意

结合awk命令的用法:

cat ipaddr | grep "2021-03-10" |awk '{FS="i"} {print $2}'

结果如下:(第一行有问题)
17:26:52i8.208.102.12
8.208.102.12
8.208.102.12
8.208.102.12
8.208.102.12
8.208.102.12
8.208.102.12
8.208.102.12
8.208.102.12
 

解决办法:在动作语句中加BEGIN

cat ipaddr | grep "2021-03-10" |awk 'BEGIN{FS="i"} {print $2}'
 


综合多种材料,详解linux的正则表达式

正则表达式的基础:

语系对正则是有影响的

grep 命令

grep [-A][-B] [--color=auto] '搜索字符串' filename

dmesg 列出核心信息

搜索指定文本grep -n 'the' filename

利用[]搜索集合字符:grep -n 't[ae]st' filename   []里,不论有几个字符,只匹配一个

集合字符反向选择:[^]:grep -n '[^g]oo' filename

字符连续编码有两种方式:

grep -n '[^a-z]oo' filename

grep -n '[^[:lower:]]oo' filename

行首与行尾字符:^$

以the开头的查找:grep -n '^the' filename

不以英文字母开头的:grep -n '^[^a-zA-Z]' filenamen   或grep -n '^[^[:alpha:]]' filename

以.结尾的查询:grep -n '\.$' filename

注意:有时一些行没有选中,这时通过cat -An 命令查看文件,观察结尾是否真的是以.$结束的。

去掉注释行和空行:grep -v '^$' filename | grep -v '^#'

任意字符. 和重复字符*

grep -n 'o*' filename 想一想,为什么会打出所有行?

限定连续字符范围{}

注意:{}是特殊字符,用在正则表达式时,要用\转义

grep -n 'o\{2\}' filename     找o出现2次的行

grep -n 'o\{2,5\}' filename     找o出现2到5次的行

正则表示法字符汇总:

ls 不支持正则,*是通配符

扩展正则表达式:

删掉空行和注释行:grep -v '^$' filename | grep -v '^#'

扩展正则:egrep -v '^$|^#' filename

扩展正则的字符汇总:

管道符号允许你在检查数据流时,用逻辑OR方式指定正则表达式引擎要用的两个或多个模式。如果任何一个模式匹配了数据流文本,文本就通过测试。如果没有模式匹配,则数据流文本匹配失败。
 

#例子:在数据流中查找正则表达式cat或dog
$ echo "The cat is asleep" | gawk '/cat|dog/{print $0}
The cat is asleep
$ echo "The dog is asleep" | gawk '/cat|dog/{print $0}'
The dog is asleep
$ echo "The sheep is asleep" | gawk '/cat|dog/{print $0}'
$

printf:格式化输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值