Linux下的正则表达式

Linux下的正则表达式

Linux下的正则表达式分为基本正则表达式(BRE)和扩展正则表达式(ERE)。扩展正则表达式主要是多了一些元字符,包括{}, ?, +等。通常BRE要比ERE块,sed支持BRE,而awk支持ERE

通配符与元字符是有区别的。例如ls -al data* 这里的*表示任意字符串,必须完全匹配才可以。*在正则表达式中是元字符,表示上一个字符出现零次或多次,只需包含即可。元字符:*[]^{}\+?|()

基本正则表达式

① 普通模式匹配

输出包含有test的行

sed -n ‘/test/p’ data.txt

awk ‘/test/{print $0}’ data.txt

从上述命令,可以看出,sedawk的一点区别,就是sed有内置的命令,如s,p。而awk必须显式使用打印和分隔变量

 

打印出包含有$的文本行

sed -n ‘/\$/p’ data.txt

② ^:以某个字符串开头

打印出以Book开头的文本行

sed -n ‘/^Book/p’ data.txt

 

③ $:以某个字符串结尾

删除空行

sed ‘/^$/d’ data.txt

 

④ :代表除了\n以外的任意一个字符

grep类似

sed -n ‘/.at/p’ data.txt

 

⑤ 字符组:表示某个范围内的一个字符

sed -n ‘/[ch]at/p’ data.txt

 

⑥ 排除字符组:不包含该范围内的任何一个字符,但必须有一个字符

sed -n ‘/[^ch]at/p’ data.txt

 

⑦ 区间字符组

sed -n ‘/[a-ch-m]at/p’ data.txt

特殊字符组:

[[:alpha:]] 任意字母

sed -n ‘/[[:alpha:]]/p’ data.txt

 

⑧ 星号*:表示上一个字符会在匹配模式的文本中出现零次或多次

echo ‘ieek’ | sed -n ‘/ie*k/p’

echo ‘baat’ | sed -n ‘/b[ae]*t/p’


.*表示任意多个字符,这与通配符下的*类似

echo ‘this is a regular pattern expression’ | sed -n ‘/regular.*expression/p’

 

扩展正则表达式

① 问号:上一个字符出现零次或一次

echo ‘bt’ | awk ‘/be?t/{print $0}’

echo ‘bat’ | awk ‘/b[ae]?t/{print $0}’

 

② 加号:上一个字符出现一次或多次

echo ‘bet’ | awk ‘/be+t/{print $0}’

 

③ 使用花括号,表示上一个字符出现的次数范围

echo ‘bt’ | gawk --re-interval ‘/be{1}t/{print $0}’

echo ‘beat’ | gawk --re-interval ‘/b[ae]{1,2}t/{print $0}’

 

④ 管道符号:或者

echo ‘The cat is asleep’ | awk ‘/cat|dog/{print $0}’

 

⑤ 聚合表达式:看成一个整体字符

echo ‘Sat’ | awk ‘/Sat(turday)?/{print $0}’


参考文献:

Linux命令行大全

Linux命令行与Shell脚本编程大全(第2版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值