正则表达式操作命令

1)基本语法
1.1. 选择
 | 竖直分隔符表示选择,例如“boy|girl”可以匹配“boy”或“girl”

1.2. 数量限定
“+”表示前面的字符必须出现至少一次(1次或多次),例如“goo+gle”可以匹配“gooogle”,“gooooogle”等
“?”表示前面的字符最多出现一次(0次或1次),例如“colou?r”可以匹配“color”或“colour”
“*”表示前面的字符可以不出现,也可以出现一次或多次(0次、或1次、或多次),例如“0*42”可以匹配42、042、0042、00042等

1.3. 范围和优先级
 ()圆括号可以用来定义模式字符串的范围和优先级
例如“gr(a|e)y”体现了优先级,竖直分隔符用于选择a或者e而不是gra和ey;
“(grand)?father”匹配father和grandfather

1.4. 语法
字符 描述
 \ 转义字符
 ^ 匹配输入字符串的开始位置
 $ 匹配输入字符串的结束位置
{n} n是一个非负整数,匹配确定的n次。例如“o{2}”不能匹配“Bob”中的“o”,但能匹配“food”中的两个“o”
{n, } n是一个非负整数,至少匹配n次。例如“o{2, }”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有“o”。 ”o{1, }”等价于“o+”,“o{0,}”则等价于“0*"
{n,m} n和m均为非负整数,其中n<=m。最少匹配n次且最多匹配m次,例如“o{1,3}”将匹配“fooood”中的前三个“o”,
“o{0,1}”等价于“0?”
 * 匹配前面的子表达式0次或多次,zo*可以匹配z、zo、zoo
 + 匹配前面的子表达式1次或多次,zo+可以匹配zo、zoo,但不能匹配z
 ? 匹配前面的子表达式0次或1次,do(es)?可以匹配do或者does中的do
 . 匹配除了“\n”之外的任何单个字符。若要匹配包含“\n”的任何字符,则使用“(.|\n)”
X|Y 匹配X或Y,“z|food”能匹配z或food,(z|f)ood则匹配zood或food
[XYZ] 匹配所包含的任意一个字符。例如[abc]可以匹配“plain”中的“a”
[^XYZ] (排除型),匹配未列出来的任意字符。例如[abc]可以匹配“plain”中的“plin”
[a-z] 匹配指定范围内的任意字符。[a-z]可以匹配“a”到“z”范围内的任意小写字母字符
[^a-z] (排除型)匹配

2)grep模式匹配命令
2.1. grep常用参数

-b 将二进制文件作为文本来进行匹配
-c 统计以模式匹配的数组
-i 忽略大小写
-n 显示匹配文本所在行的行号
-v 反选,输出不匹配行的内容
-r 递归匹配查找
-An n为正整数,表示after的意思,除了列出匹配行外,还列出后面的n行
-Bn n为正整数,表示before的意思,除了列出匹配行外,还列出前面的n行
--color=auto 将输出中的匹配项设置为自动颜色显示

$cat test
shiyanlou
www.shiyanlou.com
c
linux
date_struct
python
mysql
shell

$grep -c shiyanlou test
2

$grep -i -n c test
2:www.shiyanlou.com
3:c
5:date_struct

3)使用正则表达式
3.1. 位置
  查找/etc/group文件中以“shiyanlou”为开头的行
$grep 'shiyanlou' /etc/group

3.2. 数量
#匹配以z开头、以o结尾的所有字符串
$echo 'zero\nzo\nzoo' | grep 'z*o'
输出
zero
zo
zoo

#匹配以z开头、以o结尾,中间包含一个任意字符的字符串
$echo 'zero\nzo\nzoo' | grep 'z.o'
输出
zoo

#匹配以z开头、以任意多个o结尾的字符串
$echo 'zero\nzo\nzoo' | grep 'zo*'
输出
zero
zo
zoo

3.3. 选择
#grep默认是区分大小写的
$echo '1234\nabcd' | grep '[a-z]'

#匹配所有的小写字母
$echo '1234\nabcd' | grep '[[:lower:]]'

4)sed流编辑器
用于过滤和转换文本的流编辑器,它是一个非交互式的编辑器
sed[参数]...[执行命令][输入文件]...

-n 安静模式,只打印受影响的行
-e 用于在脚本中添加多个执行命令一次执行
-f filename 指定执行filename文件中的命令
-r 使用扩展正则表达式,默认为标准表达式
-i 将直接修改输入文件内容,而不是打印到标准输出设备

4.1. sed执行命令格式
[n1][,n2] command
[n1][~step] command

#其中一些命令可以在后面加上作用范围,如
$sed -i 's/sad/happy/g' test #g表示全局范围
$sed -i 's/sad/happy/4' test #4表示指定行中的第四个匹配字符串

n1 n2表示输入内容的行号,','逗号则表示从n1到n2行,如果为~则表示从n1开始为step为步长的所有行,command为执行动作,后面为常用动作指令。

s 行内替换
c 整行替换
a 插入到指定行的后面
i 插入到指定行的前面
p 打印指定行,通常与-n参数配合
d 删除指定行

#打印2-5行
$nl passwd | sed -n '2,5p'

#打印奇数行
$nl passwd | sed -n '1~2p'

#将输入文本中'shiyanlou'全局替换为‘hehe’,并只打印替换的那一行
$sed -n 's/shiyanlou/hehe/gp' passwd

4.2. 行间替换
$nl passwd | grep 'shiyanlou'

你可能感兴趣的:(正则表达式操作命令)