linux之正则表达式

来源:互联网 发布:js 球状旋转效果 编辑:程序博客网 时间:2024/06/06 13:10

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本

+表示前面的字符必须出现至少一次(1次或多次),例如,"goo+gle",可以匹配"gooogle","goooogle"等;
?表示前面的字符最多出现一次(0次或1次),例如,"colou?r",可以匹配"color"或者"colour";
*星号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次),例如,“0*42”可以匹配42、042、0042、00042等。

\将下一个字符标记为一个特殊字符或一个转义字符

^匹配输入字符串的开始位置

$匹配输入字符串的结束位置

{n}n是一个非负整数,匹配却的N次

{n,}至少匹配n次

{n,m}n<=m最少匹配n次最多匹配m次

*匹配前面的子表达式零次或多次

+匹配前面的子表达式一次或多次

?匹配前面的子表达式零次或一次

.匹配出"\n"之外的任何单个字符,要匹配\n可以这样写".|\n"

(pattern)匹配pattern并获取这一匹配的子字符串

x|y匹配x或Y

[xyz]匹配所包含的任意一个字符

[^xyz]匹配未列出的任意字符

[a-z]匹配指定范围内的任意字符

grep -E扩展正则表达式

grep -G基本正则表达式

grep -P正则表达式

grep -b将二进制文件作为文本来进行匹配

grep -c统计一模式匹配的数目

grep -i忽略大小写

grep -n显示匹配文本所在行的行号

grep -v反选输出不匹配的行的内容

grep -r递归匹配查找

grep -A n处理列出匹配行之外,还列出后面的n行

grep -B n还列出前面的n行

grep 'shiyanlou' /etc/group

echo 'zero\nzo\nzoo' |grep 'z..*o'将匹配z开头o结尾的所有字符串

echo 'zero\nzo\nzoo' |grep 'z.o'将匹配中间包含一个任意字符的字符串

[:alnum:] 代表英文大小写字节及数字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字节,亦即 A-Z, a-z
[:blank:] 代表空白键与 [Tab] 按键两者
[:cntrl:] 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
[:digit:] 代表数字而已,亦即 0-9
[:graph:] 除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
[:lower:] 代表小写字节,亦即 a-z
[:print:] 代表任何可以被列印出来的字节
[:punct:] 代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
[:upper:] 代表大写字节,亦即 A-Z
[:space:] 任何会产生空白的字节,包括空白键, [Tab], CR 等等
[:xdigit:] 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节

echo 'zero\nzo\nzoo' |grep -E 'zo{1}'只匹配zo

echo 'zero\nzo\nzoo' |grep -E 'zo{1,}'匹配zo开头的所有单词

echo'www.shiyanlou.com\nwww.baidu.com\nwww.google.com' | grep -E 'www\.(shiyanlou|google)\.com'

sed -n安静模式,只打印受影响的行,默认打印输入数据的全部内容

sed -e用于在脚本中添加多个执行命令一次执行

sed -f filename指定执行filename文件中的命令

sed -r使用扩展正则表达式

sed -i将直接修改输入文件内容

sed -i 's/sad/happy/g' test # g表示全局范围

s行内替换c整行替换a插入到指定行的后面i插入到指定行的前面p打印制定行d删除指定行

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

AWK是一种优良的文本处理工具,它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能

用vim创建一个文件test然后输入以下命令

awk '{

print

}' test

需要注意NR OFS这两个是awk内建的变量,NR表示当前读入的记录数,你可以简单的理解为当前处理的行数,OFS表示输出时的字段分隔符,默认为" "空格

FILENAME当前输入文件名,若有多个文件,则只表示第一个。如果输入是来自标准输入,则为空字符串
$0 当前记录的内容
$N N表示字段号,最大值为NF变量的值
FS 字段分隔符,由正则表达式表示,默认为" "空格
RS 输入记录分隔符,默认为"\n",即一行为一个记录
NF 当前记录字段数
NR 已经读入的记录数
FNR 当前输入文件的记录数,请注意它与NR的区别
OFS 输出字段分隔符,默认为" "空格
ORS 输出记录分隔符,默认为"\n"