正则表达式grep的一些操作

在我们进行编辑的时候,我们会用到vim和nano这样的的全屏编辑器,这样的编辑器顾名思义会占据我们的屏幕,来进行编辑。当然,有全屏的编辑器,就有不是全屏的文本编辑器,叫做行编辑器,对于行编辑器来说,有行编辑器三剑客,grep系,sed,awk。
这篇主要就来写grep系的编辑器的一些操作。

greb系:grep,egrep,fgrep,文本搜索工具;基于PATTERN(模式)对于给定的文本文件进行模糊搜索,grep系所有命令默认工作于贪婪搜索模式;

grep系:
    grep:Global search Regular Expression and Print out the line
        利用正则表达式进行全局搜索并将匹配到的行显示出来

格式:
            grep [options] PATTERN [FILE...]
               grep [options] [-e PATTERN | -f FILE] [FILE...]

PATTERN:过滤匹配条件,是由没有特殊意义的文本字符或者是正则表达式元字符组成;

root作为PATTERN

[[email protected] ~]#  grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

正则表达式的元字符:会被正则表达式处理引擎解释为特殊含义的字符;各自都有对应的含义,除非加上\进行转义,否则会以原来的含义进行转义解释。

所有的正则表达式都是由普通字符加上元字符构成的,

pcre:正则表达式处理引擎(处理器),用prel语言的正则表达式引擎(处理器);

正则表达式元字符:

基本的正则表达式元字符:BRE
        字符匹配类:
            .:可以匹配任意单个字符

[[email protected] ~]# cat /tmp/test/b
aaabbbccc
abcabc
abcdefg
[[email protected] ~]# grep f. /tmp/test/b
abcdefg
[[email protected] ~]# grep .f /tmp/test/b
abcdefg

[]:可以匹配任意指定范围内的单个字符;

[[email protected] ~]# grep [cd] /tmp/test/b
aaabbbccc
abcabc
abcdefg

[^]:可以匹配任意指定范围以外的单个字符;

[[email protected] ~]# grep [^d] /tmp/test/b
aaabbbccc
abcabc
abcdefg

下列所有的字符集都可以放置于[]之中用于匹配字符集范围内的单个字符;
                    [:lower:]:小写字母
                    [:upper:]:大写字母
                    [:alpha:]:大小写字母
                    [:digit:]:十进制数字
                    [:xdigit:]:十六进制数字
                    [:alnum:]:所有的十进制数字加上字母
                    [:punct:]:所有的标点符号
                    [:space:]:所有的空白字符
                    [a-z]:仅表示所有的小写字母
                    [A-Z]:仅表示的大写字母
                    [0-9]:仅表示所有的十进制数码

[[email protected] ~]# cat /tmp/test/b
aaabbbccc
abcabc
abcdefg
s
r
q
12312131231  
THIS   IS   A   "TEST"
  
[[email protected] ~]# grep [[:lower:]] /tmp/test/b
aaabbbccc
abcabc
abcdefg
s
r
q
[[email protected] ~]# grep [[:upper:]] /tmp/test/b
THIS   IS   A   "TEST"
[[email protected] ~]# grep [[:digit:]] /tmp/test/b
12312131231 
[[email protected] ~]# grep  [[:punct:]] /tmp/test/b
THIS   IS   A   "TEST"
[[email protected] ~]# grep  [[:space:]] /tmp/test/b
12312131231  
THIS   IS   A   "TEST"
[[email protected] ~]# grep  [1-3] /tmp/test/b
12312131231

次数匹配类:该类字符前面的一个字符可以出现的次数:
                    *:其前面的字符可以出现任意次,即:0次,1次或多次;
                    \?:其前面的字符可有可无,即:0次或1次;
                    \+:其前面的字符至少出现一次;
                    \{m,n\}:其前面的字符至少出现m次,最多出现n次;
                    \{m\}:其前面的字符必须出现m次;
                    \{m,\}:其前面的字符至少出现m次;
                    \{,n\}:其前面的字符出现最多不超过n次;

注意:在正则表达式中,表示任意长度的任意字符:.*

[[email protected] ~]# grep "cd*" /tmp/test/b
aaabbbccc
abcabc
abcdefg
[[email protected] ~]# grep "a\?b"  /tmp/test/b
aaabbbccc
abcabc
abcdefg
[[email protected] ~]# grep "a\+b"  /tmp/test/b
aaabbbccc
abcabc
abcdefg
[[email protected] ~]# grep "a\{1,3\}b" /tmp/test/b
aaabbbccc
abcabc
abcdefg
[[email protected] ~]# grep "a\{2\}b" /tmp/test/b
aaabbbccc
[[email protected] ~]# grep "a\{2,\}b" /tmp/test/b
aaabbbccc
[[email protected] ~]# grep "a\{,2\}b" /tmp/test/b
aaabbbccc
abcabc
abcdefg

位置锚定字符:
                    行锚定:
                        行首锚定:^
                        行尾锚定:$
                    字锚定:
                        字首锚定:\<或\b
                        字尾锚定:\>或\b

[[email protected] ~]# grep "^a\{,2\}b" /tmp/test/b
abcabc
abcdefg
[[email protected] ~]# grep "c$" /tmp/test/b
aaabbbccc
abcabc
[[email protected] ~]# grep "\<T..S\>" /tmp/test/b
THIS   IS   A   "TEST"

分组与前向引用字符:
        \(\):将小括号中包含的内容作为一个不可分割的整体来处理;
        \1,\2,\3...:前向引用
        正则表达式处理引擎的内置变量,\1表示前面所出现的第一组小括号中括选的内容,\2表示前面所出现的第二组小括号中括选的内容;...

\(string1\(string2\)\):\1表示string1,\2表示string2;
        \(string1\).*\(string2\):\1表示string1,\2表示string2;

[[email protected] ~]# grep "\(root\).*\1" /etc/passwd
root:x:0:0:root:/root:/bin/bash

或者:
            \|:将其左右的字符或字符串当做整体来对待;
                "C\|cat"   C   cat

[[email protected] ~]# grep "\(root\).*\1" /etc/passwd
root:x:0:0:root:/root:/bin/bash
[[email protected] ~]# grep "root\|ex" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ex:x:1000:1000:ex:/home/ex:/bin/bash

扩展的正则表达式元字符:ERE(所有的元字符不用转义\符号,除了字首锚定和字尾锚定以外,其余的全部和上边一样。
                   字符匹配类:
                    .:可以匹配任意单个字符
                    []:可以匹配任意指定范围内的单个字符;
                    [^]:可以匹配任意指定范围以外的单个字符;
                        下列所有的字符集都可以放置于[]之中用于匹配字符集范围内的单个字符;
                            [:lower:]:小写字母
                            [:upper:]:大写字母
                            [:alpha:]:大小写字母
                            [:digit:]:十进制数字
                            [:xdigit:]:十六进制数字
                            [:alnum:]:所有的十进制数字加上字母
                            [:punct:]:所有的标点符号
                            [:space:]:所有的空白字符
                            [a-z]:仅表示所有的小写字母
                            [A-Z]:仅表示的大写字母
                            [0-9]:仅表示所有的十进制数码

次数匹配类:该类字符前面的一个字符可以出现的次数:
                    *:其前面的字符可以出现任意次,即:0次,1次或多次;
                    ?:其前面的字符可有可无,即:0次或1次;
                    +:其前面的字符至少出现一次;
                    {m,n}:其前面的字符至少出现m次,最多出现n次;
                    {m}:其前面的字符必须出现m次;
                    {m,}:其前面的字符至少出现m次;
                    {,n}:其前面的字符出现最多不超过n次;

注意:在正则表达式中,表示任意长度的任意字符:.*

位置锚定字符:
                    行锚定:
                        行首锚定:^
                        行尾锚定:$
                    字锚定:
                        字首锚定:\<或\b
                        字尾锚定:\>或\b

分组与前向引用字符:
                    ():将小括号中包含的内容作为一个不可分割的整体来处理;
                    \1,\2,\3...:前向引用
                        正则表达式处理引擎的内置变量,1表示前面所出现的第一组小括号中括选的内容,2表示前面所出现的第二组小括号中括选的内容;...

(string1(string2)):1表示string1,2表示string2;
                        (string1).*(string2):1表示string1,2表示string2;

或者:
                    |:将其左右的字符或字符串当做整体来对待;
                        "C|cat"   C   cat

grep系:
        grep:仅支持基本正则表达式元字符;
        egrep:可以支持扩展正则表达式元字符;
        fgrep:不支持任何形式的正则表达式元字符,将所有的字符当做没有任何特殊意义的普通文本字符;

常用选项:
            -A num:同时显示被PATTREN匹配到的行及其后续num行;
            -B num:同时显示被PATTREN匹配到的行及其前面num行;
            -C num:同时显示被PATTREN匹配到的行及其前后num行;
            --color[=when]:以高亮颜色显示被匹配到的内容;默认命令就有

[[email protected] ~]# alias
alias cp=‘cp -i‘
alias egrep=‘egrep --color=auto‘
alias fgrep=‘fgrep --color=auto‘
alias grep=‘grep --color=auto‘
alias l.=‘ls -d .* --color=auto‘
alias ll=‘ls -l --color=auto‘
alias ls=‘ls --color=auto‘
alias mv=‘mv -i‘
alias rm=‘rm -i‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘

-c,--count:不输出被PATTREN匹配的行的内容,而是输出被PATTERN匹配到的行数;
            -E:可以是grep命令支持扩展正则表达式元字符;相当于执行egrep命令
            -F:相当于fgrep;
            -e:指定多个PATTERN在一个命令行中生效;
            -f:将从指定的文件中读取多个PATTERN用于一次搜索;
            -i:忽略文件中字符大小写
            -o:仅显示被PATTERN匹配到的部分,关闭贪婪模式;
            -q:安静模式;相当于 grep > /dev/null
            -v:选择没有被PATTERN匹配到的行;

[[email protected] ~]# grep -A 1 "123" /tmp/test/b
12312131231  
THIS   IS   A   "TEST"
[[email protected] ~]# grep -B 1 "123" /tmp/test/b
q
12312131231
[[email protected] ~]# grep -C 1 "123" /tmp/test/b
q
12312131231  
THIS   IS   A   "TEST"
[[email protected] ~]# grep -c  "ab" /tmp/test/b
3
[[email protected] ~]# grep -e  "ab" -e "ef" /tmp/test/b
aaabbbccc
abcabc
abcdefg
[[email protected] ~]# grep -i "is" /tmp/test/b
THIS   IS   A   "TEST"
[[email protected] ~]# grep -o "IS" /tmp/test/b
IS
IS
[[email protected] ~]# grep -q "IS" /tmp/test/b
[[email protected] ~]# grep -v "IS" /tmp/test/b
aaabbbccc
abcabc
abcdefg
s
r
q
12312131231
时间: 2024-11-06 03:44:26

正则表达式grep的一些操作的相关文章

grep与正则表达式,grep、egrep和fgrep

grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.awk .sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大:1基础正则表达式grep 工具,以前介绍过.grep -[acinv]   '搜索内容串'   filename-a 以文本文件方式搜索-c 计算找到的符合行的次数-i 忽略大小写-n 顺便输出行号-v

Linux Basics 正则表达式 grep

grep全称是:Global search Regular Expression and Printing全局搜索正则表达式并显示出来 使用正则表达式来描述选择条件. 取行选择:选取行的筛选条件,给定选取条件,只显示符合条件的行,或者只显示不符合条件的行. 对于类似的操作有三个命令:grep; egrep; fgrep grep:默认支持基本正则表达式: egrep:扩展正则表达式: fgrep:不支持正则表达式元字符,搜索字符串的速度快: 正则表达式是一类字符所书写的模式(pattern)  

基本正则表达式grep应用

前言 正则虐我千百遍,我待正则如初见. --煌朝 xxx:grep 水很深 : xxx:grep 水不深 正则表达式深: xxx:水都深,我已经淹死在里面了: xxx:正则 是永远都填不完的坑: 以上是同学们对于正则表达式的积极讨论结果. 一.那么被大家视如洪水猛兽的正则表达式到底是什么呢, 1.  从概念上讲,正则表达式是对字符串操作的一种逻辑公式,就是要事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一

正则表达式 grep与sed的文本处理

作业一:整理正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.它由一些普通字符和一些元字符(metacharacters)组成.普通字符包括大小写的字母和数字,而元字符则具有特殊的含义. 主要常用的有: 元字符 功能 元字符 功能 ^ 匹配字符串的开始位置 $ 匹配字符串的结束位置 . 匹配任意单个字符 * 匹配子表达式0次或n次 + 匹

Linux正则表达式grep与egrep

Linux正则表达式grep与egrep 正则表达式:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容.其实正则表达式,只是一种思想,一种表示方法.只要我们使用的工具支持表示这种思想那么这个工具就可以处理正则表达式的字符串.常用的工具有grep, sed, awk,这三个都是针对文本的行才操作的. grep  过滤器语法: grep  [-cinvABC]  'word'  filenam

正则表达式 grep egrep

Linux 文本处理三剑客 grep : 文本过滤工具 sed: 文本编辑器(以行为编辑对象单位) stream editor awk: 文本报告生成器: linux上awk的实现为gawk grep:Global search REgular Expression and Print out the line 作用:文本搜索工具,根据用户指定的"模式(pattern)"逐行去搜索目标文本,打印匹配到的行. 模式:由正则表达式的元字符及文本字符所编写的过滤条件: 元字符:字符不表示其字

Linux 系统之正则表达式----grep 详解

一.正则表达式的起源: 正则表达式的"祖先"可以一直上溯至对人类神经系统如何工作的早期研究.Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络. 1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念.正则表达式就是用来描述他称为"正则集的代数"

Linux学习之正则表达式&grep&egrep

我们经常需要在文档中搜索符合自己要求的内容,这些部分可能分散在文档的各个位置,各个角落.可以利用关键字例如/keyword或者?keyword一个一个的搜索,还有我可能不止想搜索关键字,而是指定一个范围,怎样操作?而且怎样把这些搜索到的内容集中地显示出来?使用正则表达式搜索字串的grep命令和egrep命令就可以满足我们的这个要求. 正则表达式(Regular Expression)是一种字符书写的模式,以行为单位进行字符的处理,透过一些特殊字符的辅助,利用这种模式可以轻易地达到对字符的搜索.删

正则表达式grep、egrep、fgrep

日期: 2015年08月27日 正则表达式: (RegularExpression,在代码中常简写为rex.regexp或RE) 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.通常被用来检索.替换符合某个模式的文本. 正则表达式是指一类字符书写的模式(pattern)这些字符成为元字符,元字符不表示其字面意义,而用于表示通配或控制功能. 正则表达式包括两类:基本正则表达式,扩展正则表达式 grep命令只支持基本正则表达式: egrep支持扩展正则表达式("e" 表