1. linux下的正则表达式,帮忙解释一下
man
bash:翻阅关于bash的用户手册页,查看其相关的功能和描述。
|:将前面的命令输出的内容以后面的命令再处理。
col
-b:过滤掉所有的控制字符,包括RLF和HRLF(使得显示出来的文本没有乱码)。
>:将前面的命令输出的内容保存到后面所述的文件中。
综合起来,就是把bash的用户手册页的内容,去掉乱码(控制字符)之后,输出到当前目录下的bash.txt内。
当命令得到执行,则当前目录下会出现一个bash.txt文件,里面的内容正是man手册内关于bash的帮助和介绍。
2. 如何在linux中写正则表达式
1.linux文本查找命令 在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令: 1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。 2...
2.正则表达式简要介绍 1.正则表达式的组成 (1).一般字符:没有特殊意义的字符 (2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义 2.如下讲下正则表达式中的常见meta字符 (1)...
3. Linux命令详解之正则表达式
特殊字符
^
行首
$
行尾
.
任意一个字符
[]
内含字符范围,加^表示反向字符范围,在该范围内任何一个字符都可以匹配
(若要恢复普通用法,可在其前加转义字符/)
[:alnum:]
字母与数字字符
[:alpha:]
字母
[:ascii:]
ascii字符
[:blank:]
空格或制表符
[:cntrl:]
ascii控制字符
[:digit:]
数字
[:graph:]
非控制、非空格字符
[:lower:]
小写字母
[:print:]
可打印字符
[:punct:]
标点符号字符
[:space:]
空白字符,包括垂直制表符
[:upper:]
大写字母
[:xdigit:]
十六进制数字
其他字符
?
至多匹配一次
*
必须匹配0次或多次
+
必须匹配1次或多次
{n}
必须匹配n次
{n,}
必须匹配n次或n次以上
{n,m}
必须匹配在n到m次之间,包括n和m
示例
查找当前目录下所有以一位数字命名且以.txt结尾的文件,并进行显示
find
.-name
[[:digit:]]/.txt
-ok
ls
-l
{}
/;
查找所有以.txt结尾的文件并显示
find
.
-name[[:alnum:]]*/.txt
-ok
ls
-l
{}
/;
4. Linux正则表达式教程:Grep Regex示例
正则表达式是特殊字符,可帮助搜索数据,匹配复杂模式。正则表达式缩写为“regexp”或“regex”。
为了便于理解,让我们逐一学习不同类型的正则表达式。
[TOC]
一些常用的正则表达式命令是tr,sed,vi和grep。下面列出了一些基本的正则表达式。
我们来看一个例子吧。
执行cat示例以查看现有文件的内容
搜索包含字母'a'的内容。
' ^ '匹配字符串的开头。让我们搜索一下STARTS的内容
仅过滤以字符开头的行。将忽略开头不包含字符“a”的行。
让我们看看另一个例子 -
仅选择那些以 $ 结尾的行
这些表达式告诉我们字符串中字符的出现次数。他们是
例:
过滤掉包含字符'p'的所有行
我们想要检查字符'p'是否在字符串中依次出现2次。为此,语法将是:
注意:您需要使用这些正则表达式添加-E。
这些正则表达式包含多个表达式的组合。他们之中有一些是:
例:
搜索所有字符't'
假设我们要过滤字符'a'在字符't'之前的行
我们可以使用命令
大括号扩展的语法是花括号“{}”内的序列或逗号分隔的项目列表。序列中的起始和结束项由两个句点“..”分隔。
一些例子:
在上面的示例中,echo命令使用大括号扩展创建字符串。
5. linux 正则表达式怎么匹配
php">一.linux文本查找命令
在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令:
1.grep:最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。
2.egrep:扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。
3.fgrep:快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。
如下简单的介绍grep命令:
语法格式:
grep[options...]pattern-spec[files...]
用途:
匹配一个或多个模式的文本行。
options:
-E:使用扩展正则表达式进行匹配,grep-E或取代egrep命令。
-F:使用固定字符串进行匹配,grep-F或取代传统的fgrep命令。
-e:通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。
模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。
-f:从pat-file文件读取模式作为匹配。
-i:模式匹配时忽略大小写差异。
-l:列出匹配模式的文件名称,而不是打印匹配的行。
-q:静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。
-s:不显示错误信息,通常与-q并用。
-v:显示不匹配模式的行。
说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。
可以使用多个-e或-f选项,建立要查找的模式列表。
二.正则表达式简要介绍
1.正则表达式的组成
(1).一般字符:没有特殊意义的字符
(2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义
2.如下讲下正则表达式中的常见meta字符
(1).POSIXBRE与ERE中都有的meta字符:
:通常用于打开或关闭后续字符的特殊含义,如(...)与{...}
.:匹配任何单个字符(除NUL)
*:匹配其前的任何数目或没有的单个字符,例:.表示任一字符,则.*匹配任一字符的任意长度
^:匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义
$:匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义
[]:匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,
(2).POSIXBRE中才有的字符:
{n,m}:区间表达式,匹配在它前面的单个字符重现的次数区别。{n}指重现n次;{n,m}指重现n至m次;
():保留空间,可以将最多9个独立的子模式存储在单个模式中。如(ab).*1:
指匹配ab组合的两次重现,中间可存在任意数目的字符。
:重复在(与)方括号内第n个子模式至此点的模式。
(3).POSIXERE中才有的字符:
{n,m}:与BRE的{n,m}功能相同
+:匹配前面正则表达式的一个或多个扩展
?:匹配前面正则表达式的零个或一个扩展
|:匹配|符号前或后的正则表达式
():匹配方括号括起来的正则表达式群
(4).方括号([])表达式
4.1.字符集[::]
标识字符集,有如下几种:
[::alnum]
:数字字符
[:digit:]
:数字字符
[:punct:]
:标点符号字符
[:alpha:]
:字母字符
[:graph:]
:非空格字符
[:space:]
:空格字符
[:blank:]
:空格与定位字符
[:lower:]
:小写字母字符
[:upper:]
:大写字母字符
[:cntrl:]
:控制字符
[:print:]
:可显示的字符
[:xdigit:]
:16进制数字
4.2.排序符号
指将多个字符视为一个符号,如[.ch.]即将ch视为一个符号
4.3.等价字符
认为多个字符相等,如[=e=]在法文的locale里,可匹配于多种与e相似的字符,此处不再列出。
说明:这三种构造除其自身的方括号之外,还必须使用额外的方括号括起来。
例:[[:alpha:]!]:匹配任一英文字母或感叹号。
[[.ch.]:匹配ch排序元素,而不匹配单独的字母c或h.
3.简单正规表达式匹配案例
china:匹配此行中任意位置有china字符的行
^china:匹配此以china开关的行
china$:匹配以china结尾的行
^china$:匹配仅有china五个字符的行
[Cc]hina:匹配含有China或china的行
Ch.na:匹配包含Ch两字母并且其后紧跟一个任意字符之后又有na两个字符的行
Ch.*na:匹配一行中含Ch字符,并且其后跟0个或者多个字符,再继续跟na两字符
二.实例
如下通过常用实例来学习BRE和ERE匹配,源文件url.txt内容如下:
www..comhttp://www..comhttps://www..comhttp://wwwcom.com
1.url匹配
匹配以http或者https开头,并且其后为:并且含有.的串
BRE匹配:
grep'^https{0,1}.*..*'url.txt
ERE匹配:
grep-E'^https?.*..*'url.txt
匹配结果如下:
http://www..comhttps://www..com
2.Email匹配
示例文件内容为:
[email protected]@[email protected]@gmail.com
@@.com
匹配以字母数字或者下划线开头的多个字符,其后有一个@之后有多个字母数字或者下划线,其中有一个.号
grep'^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*..*'email.txt
匹配结果:
[email protected]@[email protected]
先到这里,后续再接着写。
6. Linux文本匹配命令grep与fgrep使用全解
Linux中grep与fgrep命令的使用,两个命令的使用都与文本的搜索与匹配相关,是Linux入门学习中的基础知识,接下来是我为大家收集的Linux文本匹配命令grep与fgrep使用全解,希望能帮到大家。
Linux文本匹配命令grep与fgrep使用全解
grep
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。Linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
grep --help
匹配模式选择:
-E, --extended-regexp 扩展正则表达式egrep
-F, --fixed-strings 一个换行符分隔的字符串的集合fgrep
-G, --basic-regexp 基本正则
-P, --perl-regexp 调用的perl正则
-e, --regexp=PATTERN 后面根正则模式,默认无
-f, --file=FILE 从文件中获得匹配模式
-i, --ignore-case 不区分大小写
-w, --word-regexp 匹配整个单词
-x, --line-regexp 匹配整行
-z, --null-data 一个 0 字节的数据行,但不是空行
杂项:
-s, --no-messages 不显示错误信息
-v, --invert-match 显示不匹配的行
-V, --version 显示版本号
--help 显示帮助信息
--mmap use memory-mapped input if possible
输入控制:
-m, --max-count=NUM 匹配的最大数
-b, --byte-offset 打印匹配行前面打印该行所在的块号码。
-n, --line-number 显示的加上匹配所在的行号
--line-buffered 刷新输出每一行
-H, --with-filename 当搜索多个文件时,显示匹配文件名前缀
-h, --no-filename 当搜索多个文件时,不显示匹配文件名前缀
--label=LABEL print LABEL as filename for standard input
-o, --only-matching 只显示一行中匹配PATTERN 的部分
-q, --quiet, --silent 不显示任何东西
--binary-files=TYPE 假定二进制文件的TYPE 类型;
TYPE 可以是`binary', `text', 或`without-match'
-a, --text 匹配二进制的东西
-I 不匹配二进制的东西
-d, --directories=ACTION 目录操作,读取,递归,跳过
-D, --devices=ACTION 设置对设备,FIFO,管道的操作,读取,跳过
-R, -r, --recursive 递归调用
--include=PATTERN 只查找匹配FILE_PATTERN 的文件
--exclude=PATTERN 跳过匹配FILE_PATTERN 的文件和目录
--exclude-from=FILE 跳过所有除FILE 以外的文件
-L, --files-without-match 匹配多个文件时,显示不匹配的文件名
-l, --files-with-matches 匹配多个文件时,显示匹配的文件名
-c, --count 显示匹配了多少次
-Z, --null 在FILE 文件最后打印空字符
文件控制:
-B, --before-context=NUM 打印匹配本身以及前面的几个行由NUM控制
-A, --after-context=NUM 打印匹配本身以及随后的几个行由NUM控制
-C, --context=NUM 打印匹配本身以及随后,前面的几个行由NUM控制
-NUM 根-C的用法一样的
--color[=WHEN],
--colour[=WHEN] 使用标志高亮匹配字串;
-U, --binary 使用标志高亮匹配字串;
-u, --unix-byte-offsets 当CR 字符不存在,报告字节偏移(MSDOS 模式)
例:
测试文件
复制代码
代码如下:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
a,匹配含有root的行
复制代码
代码如下:
[root@krlcgcms01 test]# grep root test
root:x:0:0:root:/root:/bin/bash
b,匹配以root开头或者以zhang开头的行,注意反斜杠
复制代码
代码如下:
[root@krlcgcms01 test]# cat test |grep '^\(root\|zhang\)'
root:x:0:0:root:/root:/bin/bash
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
c,匹配以root开头或者以zhang开头的行,注意反斜杠,根上面一个例子一样,-e默认是省去的
[root@krlcgcms01 test]# cat test |grep -e '^\(root\|zhang\)'
root:x:0:0:root:/root:/bin/bash
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
d,匹配以zhang开头,只含有字母
复制代码
代码如下:
[root@krlcgcms01 test]# echo 'zhangying' |grep '^zhang[a-z]*$'
zhangying
e,匹配以bin开头的行,用的egrep,在这里可以换成-F,-G
复制代码
代码如下:
[root@krlcgcms01 test]# cat test |grep -E '^bin'
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
f,在匹配的行前面加上该行在文件中,或者输出中所在的行号
复制代码
代码如下:
[root@krlcgcms01 test]# cat test|grep -n zhangy
7:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
13:ba:x:1002:1002::/home/zhangy:/bin/bash
15:@zhangying:*:1004:1004::/home/test:/bin/bash
g,不匹配以bin开头的行,并显示行号
复制代码
代码如下:
[root@krlcgcms01 test]# cat test|grep -nv '^bin'
root:x:0:0:root:/root:/bin/bash
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
h,显示匹配的个数,不显示内容
复制代码
代码如下:
[root@krlcgcms01 test]# cat test|grep -c zhang
3
i,匹配system,没有加-i没有匹配到东西。
复制代码
代码如下:
[root@krlcgcms01 test]# grep system test
[root@krlcgcms01 test]# grep -ni system test
9:dbus:x:81:81:System message bus:/:/bin/false
j,匹配zhan没有匹配到东西,匹配zhangy能匹配到,因为在test文件中,有zhangy这个单词
复制代码
代码如下:
[root@krlcgcms01 test]# cat test|grep -w zhan
[root@krlcgcms01 test]# cat test|grep -w zhangy
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
k,在这里-x后面东西,和输出中的整行相同时,才会输出
[root@krlcgcms01 test]# echo "aaaaaa" |grep -x aaa
[root@krlcgcms01 test]# echo "aaaa" |grep -x aaaa
aaaa
l,最多只匹配一次,如果把-m 1去掉的话,会有三个
复制代码
代码如下:
[root@krlcgcms01 test]# cat test |grep -m 1 zhang
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
m,匹配行的前面显示块号,这个块号是干什么的,不知道,有谁知道可否告诉我一下
复制代码
代码如下:
[apacheuser@krlcgcms01 test]$ cat test |grep -b zha
241:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
480:ba:x:1002:1002::/home/zhangy:/bin/bash
558:@zhangying:*:1004:1004::/home/test:/bin/bash
n,多文件匹配时,在匹配的行前面加上文件名
复制代码
代码如下:
[apacheuser@krlcgcms01 test]$ grep -H 'root' test test2 testbak
test:root:x:0:0:root:/root:/bin/bash
test2:root
testbak:root:x:0:0:root:/root:/bin/bash
o,多文件匹配时,在匹配的行前面不加上文件名
复制代码
代码如下:
[apacheuser@krlcgcms01 test]$ grep -h 'root' test test2 testbak
root:x:0:0:root:/root:/bin/bash
root
root:x:0:0:root:/root:/bin/bash
p,多文件匹配时,显示匹配文件的文件名
复制代码
代码如下:
[apacheuser@krlcgcms01 test]$ grep -l 'root' test test2 testbak DAta
test
test2
testbak
q,没有-o时,有一行匹配,这一行里面有3个root,加上-o后,这个3个root就出来了
复制代码
代码如下:
[apacheuser@krlcgcms01 test]$ grep 'root' test
root:x:0:0:root:/root:/bin/bash
[apacheuser@krlcgcms01 test]$ grep -o 'root' test
root
root
root
r,递归显示匹配的内容,在test目录下面建个mytest目录, test目录下面的test文件到mytest下面,能看到上面的结果
复制代码
代码如下:
[root@krlcgcms01 test]# grep test -R /tmp/test/mytest
/tmp/test/mytest/test:test:x:1003:1003::/home/test:/bin/bash
/tmp/test/mytest/test:@zhangying:*:1004:1004::/home/test:/bin/bash
s,显示匹配root后面的3行
复制代码
代码如下:
[root@krlcgcms01 test]# cat test |grep -A 3 root
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
fgrep
用法: fgrep [选项]... PATTERN [FILE]...
在每个 FILE 或是标准输入中查找 PATTERN。
PATTERN 是一组由断行符分隔的定长字符串。
例如: fgrep -i 'hello world' menu.h main.c
正则表达式选择与解释:
-e, --regexp=PATTERN 用 PATTERN 来进行匹配操作
-f, --file=FILE 从 FILE 中取得 PATTERN
-i, --ignore-case 忽略大小写
-w, --word-regexp 强制 PATTERN 仅完全匹配字词
-x, --line-regexp 强制 PATTERN 仅完全匹配一行
-z, --null-data 一个 0 字节的数据行,但不是空行
杂项:
-s, --no-messages 不显示错误信息
-v, --invert-match 选中不匹配的行
-V, --version 显示版本信息并退出
--help 显示此帮助并退出
--mmap 忽略向后兼容性
Output control:
-m, --max-count=NUM 匹配的最大数
-b, --byte-offset 打印匹配行前面打印该行所在的块号码
-n, --line-number 显示的加上匹配所在的行号
--line-buffered 刷新输出每一行
-H, --with-filename 当搜索多个文件时,显示匹配文件名前缀
-h, --no-filename 当搜索多个文件时,不显示匹配文件名前缀
--label=LABEL use LABEL as the standard input file name prefix
-o, --only-matching 只显示一行中匹配PATTERN 的部分
-q, --quiet, --silent 不显示所有输出
--binary-files=TYPE 假定二进制文件的TYPE 类型;
TYPE 可以是`binary', `text', 或`without-match'
-a, --text 等同于 --binary-files=text
-I 等同于 --binary-files=without-match
-d, --directories=ACTION 操作目录的方式;
ACTION 可以是`read', `recurse',或`skip'
-D, --devices=ACTION 操作设备、先入先出队列、套接字的方式;
ACTION 可以是`read'或`skip'
-R, -r, --recursive 等同于 --directories=recurse
--include=FILE_PATTERN 只查找匹配FILE_PATTERN 的文件
--exclude=FILE_PATTERN 跳过匹配FILE_PATTERN 的文件和目录
--exclude-from=FILE 跳过所有除FILE 以外的文件
--exclude-dir=PATTERN 跳过所有匹配PATTERN 的目录。
-L, --files-without-match 只打印不匹配FILEs 的文件名
-l, --files-with-matches 只打印匹配FILES 的文件名
-c, --count 只打印每个FILE 中的匹配行数目
-T, --initial-tab 行首tabs 分隔(如有必要)
-Z, --null 在FILE 文件最后打印空字符
文件控制:
-B, --before-context=NUM 打印以文本起始的NUM 行
-A, --after-context=NUM 打印以文本结尾的NUM 行
-C, --context=NUM 打印输出文本NUM 行
-NUM 等同于 --context=NUM
--color[=WHEN],
--colour[=WHEN] 使用标志高亮匹配字串;
WHEN 可以是`always', `never'或`auto'
-U, --binary 不要清除行尾的CR 字符(MSDOS 模式)
-u, --unix-byte-offsets 当CR 字符不存在,报告字节偏移(MSDOS 模式)
‘fgrep’已不再使用了;请用 ‘grep -F’代替。
不带 FILE 参数,或是 FILE 为 -,将读取标准输入。如果少于两个 FILE 参数
就要默认使用 -h 参数。如果选中任意一行,那退出状态为 0,否则为 1;
如果有错误产生,且未指定 -q 参数,那退出状态为 2。
例:
复制代码
代码如下:
[root@linux test]# cat abc.sh |fgrep a #匹配含有a的
看了“Linux文本匹配命令grep与fgrep使用全解”还想看:
1. linux grep命令详解
2. 全面解析Linux的grep命令中正则表达式的用法
3. Linux下如何使用grep命令搜索多个单词
4. 开发人员常用什么linux命令
7. Linux正则表达式与通配符
正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。
只有掌握了正则表达式,才能全面地掌握 Linux 下的常用文本工具(例如:grep、egrep、GUN sed、 Awk 等) 的用法
grep、sed、awk天然支持正则
grep -v代表反选,反向选择匹配到的内容
grep -E代表使用扩展正则
grep -P代表使用Perl正则
sed -r 代表使用扩展正则
正则表达式分为三类(man grep可以看到,分别是basic RegExs,extended RegExs,perl RegExs)
1、基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)
2、扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)
3、Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)
b. 处理过程:查找文本文件中是否包含要查找的 “关键字”(关键字可以是正则表达式) ,默认返回匹配的该行的内容
c. grep|egrep处理文件时,按行处理 |
| sed | sed | sed -r | - | a. 处理对象:文本文件
b.处理操作:对文本文件的内容进行 查找、替换、删除、增加等操作
c. sed 在处理文本文件的时候,按行处理 |
| awk | - | awk | - | a. awk 处理的对象:文本文件
b. awk 处理操作:主要是对列进行操作 |
注意:egrep 或 sed -r 默认使用扩展正则表达式(EREs),一般特殊字符({})可以不转义
grep -E 以及egrep(Extend Regular Expression)
Linux通配符和三剑客的正则表达式是不一样的,因此,代表的意义也有较大的区别 。
通配符一般用户命令行bash环境,而linux正则表达式用于grep, sed, awk场景。
通配符说明
示例:* 的使用:代表任意0-N个字符,代表所有字符
8. Linux||正则表达式及grep命令
以下内容首发自公众号“小汪Waud”。
本期介绍在Linux环境下的正则表达式及grep命令。
正则表达式(Regular Expression)是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些字符的特定组合,组成一个“规则字符串”,这个字符串用来表达对字符串的一种过滤逻辑。
正则表达式基本上是一种表示法,只要程序支持这种表示法,该程序就可以用来作为正则表达式的字符串处理之用。如vi、grep、awk、sed等程序支持正则表达式,所以可以使用正则表达式的特殊字符来进行字符串的处理。但例如cp、ls等命令并不支持正则表达式,所以只能用自己的通配符。
正则表达式依照 不同的严谨度 分为:基础正则表达式和扩展正则表达式。
注意!
grep是一种强大的文本搜索工具,可以使用 正则表达式匹配模式 查找文件里符合条件的字符串,并打印出来。
有点类似于WORD里的查找功能。
grep支持三种正则表达式语法:Basic、Extended和perl兼容。 如果没有提供正则表达式类型,grep将搜索模式解释为基本的正则表达式。要将模式解释为扩展正则表达式,请使用-E。
查看grep的帮助文档,如下
基本用法
grep [OPTION]... PATTERN [FILE]...
高级用法
grep [-A] [-B] [--color=auto] "查找字符" [模式] [文件]
常用参数
首先通过cat命令查看samples.txt的内容,如下图
如果想检索以K为行首的行,通过以下命令即可得到
如果想检索以Z为行尾的行,通过以下命令即可得到
如果想检索三个字符其中前面为K,后面为D中间字符,为任意字符,通过以下命令即可得到
参考资料
https://www.runoob.com/linux/linux-comm-grep.html
https://www.bilibili.com/video/BV1Yy4y117SX?p=12
9. Linux正则表达式
一.linux文本查找命令
在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令:
1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。
2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。
3.fgrep : 快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。
如下简单的介绍grep命令:
语法格式:
grep [options ...] pattern-spec [files ...]
用途:
匹配一个或多个模式的文本行。
options:
-E : 使用扩展正则表达式进行匹配, grep -E 或取代 egrep 命令。
-F : 使用固定字符串进行匹配, grep -F 或取代传统的fgrep命令。
-e : 通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。
模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。
-f : 从pat-file文件读取模式作为匹配。
-i : 模式匹配时忽略大小写差异。
-l : 列出匹配模式的文件名称,而不是打印匹配的行。
-q : 静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。
-s : 不显示错误信息,通常与-q并用。
-v : 显示不匹配模式的行。
说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。
可以使用多个-e 或 -f 选项,建立要查找的模式列表。
二.正则表达式简要介绍
1.正则表达式的组成
(1).一般字符:没有特殊意义的字符
(2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义
2.如下讲下正则表达式中的常见meta字符
(1).POSIX BRE与ERE中都有的meta字符:
\ : 通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}
. : 匹配任何单个字符(除NUL)
* : 匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度
^ : 匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义
$ : 匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义
[] : 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,
(2).POSIX BRE中才有的字符:
\{n,m\} : 区间表达式,匹配在它前面的单个字符重现的次数区别。\{n\}指重现n次;\{n,m\}指重现n至m次;
\( \) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如\(ab\).*\1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。
\n : 重复在\(与\)方括号内第n个子模式至此点的模式。
(3).POSIX ERE中才有的字符:
{n,m} : 与BRE的\{n,m\}功能相同
+ : 匹配前面正则表达式的一个或多个扩展
? : 匹配前面正则表达式的零个或一个扩展
| : 匹配|符号前或后的正则表达式
( ) : 匹配方括号括起来的正则表达式群
(4). 方括号([])表达式
4.1.字符集 [: :]
标识字符集,有如下几种:
[::alnum] : 数字字符[:digit:] : 数字字符[:punct:] : 标点符号字符
[:alpha:] : 字母字符[:graph:] : 非空格字符[:space:] : 空格字符
[:blank:] : 空格与定位字符[:lower:] : 小写字母字符[:upper:] : 大写字母字符
[:cntrl:] : 控制字符[:print:] : 可显示的字符[:xdigit:] : 16进制数字
4.2.排序符号
指将多个字符视为一个符号,如[.ch.]即将ch视为一个符号
4.3.等价字符
认为多个字符相等,如[=e=]在法文的locale里,可匹配于多种与e相似的字符,此处不再列出。
说明:这三种构造除其自身的方括号之外,还必须使用额外的方括号括起来。
例 : [[:alpha:]!] : 匹配任一英文字母或感叹号。
[[.ch.] : 匹配ch排序元素,而不匹配单独的字母c或h.
3.简单正规表达式匹配案例
china : 匹配此行中任意位置有china字符的行
^china : 匹配此以china开关的行
china$ : 匹配以china结尾的行
^china$ : 匹配仅有china五个字符的行
[Cc]hina : 匹配含有China或china的行
Ch.na : 匹配包含Ch两字母并且其后紧跟一个任意字符之后又有na两个字符的行
Ch.*na : 匹配一行中含Ch字符,并且其后跟0个或者多个字符,再继续跟na两字符
二.实例
如下通过常用实例来学习BRE和ERE匹配,源文件url.txt内容如下:
www..com
http://www..com
https://www..com
http://wwwcom
.com
1.url匹配
匹配以http或者https开头,并且其后为:并且含有.的串
BRE匹配:
grep '^https\{0,1\}.*\..*' url.txt
ERE匹配:
grep -E '^https?.*\..*' url.txt
匹配结果如下:
http://www..com
https://www..com
2.Email匹配
示例文件内容为:
[email protected]
aaaa@
[email protected]
[email protected]
@@.com
匹配以字母数字或者下划线开头的多个字符,其后有一个@之后有多个字母数字或者下划线,其中有一个.号
grep '^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*\..*' email.txt
匹配结果:
[email protected]
[email protected]
[email protected]
转自 嘉为教育-rhce认证_rhce培训_linux培训_linux认证_linux考证