shell正则

第五天

REGEXP:REGular EXPression
Pattern:

正则表达式:
Basic REGEXP:基本
Extended REGEXP:扩展

基本正则表达式:

字符匹配类:
.: 任意单个字符
[]: 指定范围内的任意单个字符
[^]: 外

字符次数匹配:
*: 其前的字符任意次
?: 其前的字符0或1次
{m,n}:至少m次,至多n次;(m可以为0,但不能省略,n为0可以省略)

.*: 任意长度的任意字符

锚定:
^: 铆钉行首
$: 锚定行尾
<, :锚定单词首
>, :锚定词尾

():实现分组
1, 2, 3, ...用于后向引用

grep:使用基本正则表达式定义的模式来过滤文本的命令;
-i 忽略字符大小写
-v 反向搜索,显示不匹配的字符
-o 只显示匹配到的字符串
--color
-E: extended 使用扩展正则表达式
-A NUM: after-context=NUM 显示匹配到字符后面的n行
-B NUM: before-context=NUM 显示匹配到字符前面的n行
-C NUM: context=NUM 前后各n行
例子:grep -C 1 --colour '^gdm' /etc/passwd



7、取出一个文件路径的目录名称;即父目录 /var/log 取var /etc/passwd/ 取etc
echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@1@g'
基名:
echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@1@g'


扩展正则表达式:grep -E

字符匹配:(与正则表达式相同)
. :任意单个字符
[] :指定范围内的任意单个字符
[^]: 外

次数匹配:
*: (与正则相同)其前字符任意次
?: (与正则相同)其前字符0或1次
+: 匹配其前面的字符至少1次 【相当于正则表达式中的{1,}】

5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
grep '^[[:space:]]{1,}' /boot/grub/grub.conf
grep -E '^[[:space:]]+' /boot/grub/grub.conf

{m,n}:无需使用反斜线

位置锚定:(与正则一样)
^
$
<
>


分组:
():分组(不再需要斜线) 【此法很爽,用就用扩展正则】
1, 2, 3, ...

或者
|: or
C|cat: 是指C或cat而非Cat或cat 即 | 的两侧整体部分
grep -E '(C|c)at' test.txt


2、找出ifconfig命令结果中的1-255之间的整数;

ifconfig | egrep '<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>
有|要加括号防止锚定错误
grep -E = egrep

4、显示所有以数字结尾且文件名中不包含空白的文件;
ls *[^[:space:]]*[0-9] ?????????


找出/boot/grub/grub.conf文件中1-255之间的数字;
<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>

.

ifconfig | egrep '<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>'

ifconfig | egrep --color '(<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.){3}<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>'

IPv4:
5类:A B C D E
A:1-127
B:128-191
C:192-223

<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])>(.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])>){2}.<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])>


http://mageedu.blog.51cto.com/


grep, egrep
fgrep: (fast grep 快速匹配检索 )不支持正则表达式

 https://blog.csdn.net/yufenghyc/article/details/51078107

grep中使用"d"匹配数字不成功的原因

参考:正则表达式BREs,EREs,PREs的比较

首先正则表达式分为三类(man grep可以看到,分别是basic RegExs,extended RegExs,perl RegExs)

正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。

一、正则表达式分类:

1、基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx  简称 BREs)

2、扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)

3、Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)

 说明:只有掌握了正则表达式,才能全面地掌握 Linux 下的常用文本工具(例如:grep、egrep、GUN sed、 Awk 等) 的用法

二、Linux 中常用文本工具与正则表达式的关系 

常握 Linux 下几种常用文本工具的特点,对于我们更好的使用正则表达式是很有帮助的

  • grep , egrep 正则表达式特点:
1grep 支持:BREs、EREs、PREs 正则表达式

grep 指令后不跟任何参数,则表示要使用 ”BREs“ 

grep 指令后跟 ”-E" 参数,则表示要使用 “EREs“

grep 指令后跟 “-P" 参数,则表示要使用 “PREs"

 

2egrep 支持:EREs、PREs 正则表达式

egrep 指令后不跟任何参数,则表示要使用 “EREs”

egrep 指令后跟 “-P" 参数,则表示要使用 “PREs"

 

3grepegrep 正则匹配文件,处理文件方法

a. grepegrep 的处理对象:文本文件

b. grepegrep 的处理过程:查找文本文件中是否含要查找的 “关键字”(关键字可以是正则表达式) ,如果含有要查找的 ”关健字“,那么默认返回该文本文件中包含该”关健字“的该行的内容,并在标准输出中显示出来,除非使用了“>" 重定向符号,

c. grepegrep 在处理文本文件时,是按行处理的
  • sed 正则表达式特点
1sed 文本工具支持:BREs、EREs

sed 指令默认是使用"BREs"

sed 命令参数 “-r ” ,则表示要使用“EREs"

2sed 功能与作用

a. sed 处理的对象:文本文件

b. sed 处理操作:对文本文件的内容进行 --- 查找、替换、删除、增加等操作

c. sed 在处理文本文件的时候,也是按行处理的
  • Awk(gawk)正则表达式特点
1)Awk 文本工具支持:EREs

awk 指令默认是使用 “EREs"

2)Awk 文本工具处理文本的特点

a. awk 处理的对象:文本文件

b. awk 处理操作:主要是对列进行操作

原文地址:https://www.cnblogs.com/yum777/p/6425351.html