如何使用正则表达式写出高效率的GREP

正则表达式可追溯到科学家对人类神经系统工作原理的早期研究。是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

作用:

1. 给定的字符串是否符合正则表达式的匹配

2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

特点:

1. 灵活性、逻辑性和功能性非常的强;

2. 可以迅速地用极简单的方式达到字符串的复杂控制。

3. 对于刚接触的人来说,比较晦涩难懂。

正则表达式元字符使用方法:

匹配的关键点:

字符匹配,匹配次数,位置锚定,特殊符号、分组\(\)与引用\#

字符匹配:

.: 配置任意单字符

[^]:取反,不包含,默认是一个字符长度

[ ]:范围内的任意字符

POSIX字符类:

[:alnum:] 匹配字母和数字. 等价于A-Za-z0-9.

[:digit:] 匹配(十进制)数字. 等价于0-9.

[:alpha:] 匹配字母. 等价于A-Za-z.

[:lower:] 匹配小写字母. 等价于a-z.

[:upper:] 匹配大写字母. 等价于A-Z.

[:space:] 匹配空白字符(空格和水平制表符).

匹配次数:

    .  : 配置任意单字符

*   : 任意长度,它前面的字符可以出现任意次

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

\? : 0次或1次,它前面的字符可有可无

\{m,n\}: 前面的字符至少出现m次,前面的字符至多出现n次

\{m\} : m次,前面的字符出现m次

\{m,\} : 前面的字符至少出现m次

\{0,n\}: 前面的字符至多出现n次

位置锚定:行和词

行:

^$:空白行
^:行首锚定
 $:行尾锚定

单词:
   \<,\b:单词词首锚定
   \>,\b:单词词尾锚定

特殊符号:

\(\)  :分组

|     :或
  \.    :转意符

分组与引用

\(\)  :分组

\#    :引用第#个括号所匹配到的内容,而非模式本身

GREP是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。包括grep、egrep和fgrep

格式:grep [option]...‘PATTERN‘ FILE...

grep命令选项

-i:--ignore-case  忽略大小写差别。

-v:--revert-match反选,只显示不匹配的行。

-o:仅显示匹配的字串,而非字符串所在的行

--color=auto:高亮显示

-E:支持使用  扩展正则表达式

-A #:显示匹配到的后#行

-B #:显示匹配到的前#行

-C #:显示匹配到的前后各#行

语法与释义:

基础语法"^([]{})([]{})([]{})$"
  正则字符串 = "开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束"

实例:

基本的正则表达式:

1、显示/proc/meminfo文件中以大写或小写S开头的行;

# grep -i ‘^s‘ /proc/meminfo

# grep ‘^[Ss]‘ /proc/meminfo

# egrep ‘^(S|s)‘ /proc/meminfo

2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1

3、显示/etc/passwd文件中其默认shell为/bin/bash的用户中UID号最大的用户;

# grep "/bin/bash$" /etc/passwd | sort -t: -k3 -n |tail -1 | cut -d: -f1

5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

# grep "^[[:space:]]\{0,1\}" /boot/grub/grub.conf

# grep "^[[:space:]]\?" /boot/grub/grub.conf

7、找出netstat-tan命令执行结果中以‘LISTEN‘结尾的行;

# netstat -tan | grep "LISTEN[[:space:]]*$"

8、找出当前系统上其用户名和默认shell相同的用户;

# grep "^\([[:alnum:]]\{1,\}\):.*\1$" /etc/passwd

扩展的正则表达式:

1、找出/etc/rc.d/init.d/functions文件中某单词后跟一个小括号“()”行;

# egrep -o "\<[[:alnum:]]+\>\(\)"/etc/rc.d/init.d/functions

2、使用echo命令输出一个路径,而后使用grep取出其基名;

#echo "/etc/sysconfig/" | egrep -o"[[:alnum:]]+/?"

# echo "/etc/sysconfig/" | egrep –o "[^/]+/?$"| cut -d/ -f1

3、显示本机ip地址:

#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])\>)‘

如何写出高效率的正则表达式:

使用正则表达式语法对于目标文本进行描述和界定,可以像画素描一样,先大致勾勒出框架,再逐步在局步实现细节。

如何使用正则表达式写出高效率的GREP

时间: 2024-10-11 11:06:00

如何使用正则表达式写出高效率的GREP的相关文章

2.3为方便旅客,某航空公司拟开发一个机票预定系统。 写出问题定义并分析系统的可行性。

为方便旅客,某航空公司拟开发一个机票预定系统.旅行社把预定机票的旅客信息(姓名.性别.工作单位.身份证号码.旅行时间.旅行目的地等)输入进 入该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统校对无误即印出机票给旅客. 写出问题定义并分析系统的可行性. 1>     目标:在一个月内建立一个高效率,无差错的航空公司机票预定系统 2>     存在的主要问题:人工不易管理,手续繁琐 3>     建立新系统 ①  经济可行性        

在C#中使用正则表达式筛选出图片URL并下载图片URL中的图片到本地

本功能主要用到的知识点如下: 1.正则表达式 2.C#中下载文件功能的实现 3.泛型集合的使用 4.进程的简单操作(用于结束当前程序) 下面就简单说一下是如何使用这些知识点的.先详细说下这个程序主要实现的功能是什么,现有一个文本文件里面都是从网页上复制下来的源代码.现需要将其中的以http.https.ftp开头,以.jpg,.png,.gif开头的图片URL地址筛选出来,并去访问这些链接,将URL中所对应的图片下载下来.经过分析后.决定使用正则表达式筛选URL地址.并使用WebClient类去

如何写出高性能的.net程序

本文是一个小工作总结. 总结这么久的性能优化经验. 有一次电话面试, 面试官说我简历里提到了性能优化, 他问我性能优化有什么章法吗?给他说说. 我当时真迷糊了. 真的,做了这么久的性能优化还真不知道性能优化有什么章法. 一直是自己凭感觉乱弄, 运气比较好, 还真的可以弄到点子上, 运行时间急剧缩短. 一提起优化, 大家第一反应就是算法. 不过说来惭愧, 我这种懒人, 对算法最一头雾水了, 算法导论买回来看了前几页就扔那压东西了, 现在好像还丢了. 不知道哪次搬家弄没了. 所以本文的主要核心就是如

正则表达式和文本搜索工具grep

正则表达式是由字面文本和具有特殊意义的符号组成的.我们可以根据具体需求,使用它们构造出合适的正则表达式来匹配文本.它是一种匹配文本的通用语言.正则表达式是模式匹配技术的核心,借助合适的正则表达式,可以生成我们所需的各类输出结果,例如过滤.剥离.替换.搜索等. 正则表达式的基本组成部分 ^ #行起始标记(使用cat -a显示空格,行首,行尾等标记.) #示例 ^It 匹配以It起始的行 $ #行尾标记 #示例 It$ 匹配以It结尾的行 . #匹配任意一个字符 #示例:Hack.匹配Hackl和H

详解正则表达式以及文本处理工具&mdash;grep、egrep的用法和特性

一.grep (1)grep简介 grep:全称是Global search REgular expression and Print out the line,全局搜索正则表达式并输出合适的行. grep是一种强大的文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行.(只对文本进行搜索处理) Unix的grep家族包含grep.egrep和fgrep. (2)grep的用法 语法格式:grep [option]... 'PATTERN' FILE... 选

正则表达式及编程三剑客(grep、sed、awk)命令详解

博文大纲:一.正则表达式(1)正则表达式的定义(2)正则表达式用途1.基础正则表达式(1)grep命令工具2.扩展正则表达式二.文本编辑处理器1.grep命令工具2.sed命令工具3.awk命令工具 一.正则表达式 (1)正则表达式的定义 正则表达式又称正规表达式.常规表达式.在代码中常简写为regex.regexp或RE.正则表达式是使用单个字符串来描述,匹配一系列符合某个句法规则的字符串.简单的说,正则表达式是一种匹配字符串的方法,通过一些特殊符号,实现快速查找.删除.替换某个特定字符串.

【技能】使用纯CSS+html写出方向箭头,简单大方,好看

使用纯CSS+html写出方向箭头,贴出来就可以用,100%原创 <html> <head> <title></title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <style type="text/css"> .pointsRule{ display: inline-blo

我的Java历程_写出这个数

lzJava基础进行中,今天偶然间看到的一个题目: 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字.如下代码: import java.util.*;public class Main2{ public static void main(String[] args){ String[] date = {"Ling", "Yi", "Er", "San", "Si", "Wu&q

代码示例:一些简单技巧优化JavaScript编译器工作详解,让你写出高性能运行的更快JavaScript代码

告诉你一些简单的技巧来优化JavaScript编译器工作,从而让你的JavaScript代码运行的更快.尤其是在你游戏中发现帧率下降或是当垃圾回收器有大量的工作要完成的时候. 单一同态: 当你定义了一个两个参数的函数,编译器会接受你的定义,如果函数参数的类型.个数或者返回值的类型改变编译器的工作会变得艰难.通常情况下,单一同态的数据结构和个数相同的参数会让你的程序会更好的工作. function example(a, b) { // 期望a,b都为数值类型 console.log(++a * +