正则表达式与grep

前端之家收集整理的这篇文章主要介绍了正则表达式与grep前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

文本编辑工具

grep:是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来;

sed :是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用;

awk :是一种编程语言,用于在linux/unix下对文本和数据进行处理;

grep使用

grep [OPTION] PATTERN [FILE…]

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

选项:

�Ccolor=auto:自动加颜色;

-i :ignorecase,忽略字符大小写;

-o :仅显示匹配道德字符串本身;

-v :�Cinvert-match:显示不能被模式匹配到的行;

-E :支持使用扩展的正则表达式元字符;

-q :不输出任何信息;


-A<显示列数>:除了显示符合范本样式的那一行之外,并显示该行之后的内容

-B<显示列数>:在显示符合范本样式的那一行之外,并显示该行之前的内容

-C<显示列数>:除了显示符合范本样式的那一列之外,并显示该列之前后的内容


正则表达式

正则表达式,又称规则表达式。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式元字符

(1)字符匹配:

. :匹配任意单个字符;

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

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

(2)匹配次数

* :匹配其前面的字符任意次;

.* :匹配任意长度的任意字符;

\? :匹配其前面的字符至多1次;

\+ :匹配其前面的字符至少1次;

\{m\} :匹配其前面的字符m次;

\{m,n\} :匹配其前面的字符至少m次,至多n次;

\{0,n\} :匹配其前面的字符至多n次;

(3)位置锚定:

^ :行首锚定;

$ :行尾锚定;

^PATTERN$ :用PATTERN来匹配整行;

^$ :匹配空白行;

^[[:space:]]*$ :包含空白字符的行或空行;

单词:非特殊字符组成的连续字符;

\<或<b :词首锚定;

\>或\b :词尾锚定;

\<PATTERN\> :匹配完整单词;

(4)分组及引用:

\(\) :将一个或多个字符当作一个整体;分组括号中的内容会被记录于内部变量中,可作为引用;

后向引用:

\1 :引用第一个括号中匹配到的字符;

\2 :引用第二个括号中匹配到的字符;

… …


示例

1.显示当前系统上root、fedora或user1用户的默认shell;

#less/etc/passwd|egrep"^(root|fedora|user1)\>"|cut-d:-f1,7
root:/bin/bash
user1:/bin/bash
fedora:/bin/bash

或

#less/etc/passwd|grep"^\(root\|fedora\|user1\)\>"|cut-d:-f1,7
root:/bin/bash
user1:/bin/bash
fedora:/bin/bash

2.找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();

#egrep"\<[[:alnum:]]+\(\)"/etc/rc.d/init.d/functions
checkpid(){
daemon(){
killproc(){
pidfileofproc(){
pidofproc(){
status(){
success(){
failure(){
passed(){
warning(){
action(){
strstr(){

3.使用echo命令输出一个绝对路径,使用grep取出其基名;

扩展:取出其路径名;

#echo"/var/log/cron"|egrep-o"[^/]+/?$"

#echo"/var/log/cron"|egrep-o"^(/[^/]+)+/$"

4.找出ifconfig命令结果中的1-255之间数字

#ifconfig|egrep-o"[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]"

5.挑战题:写一个模式,能匹配合理的IP地址;

#ifconfig|egrep-o"(([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])"

6.挑战题:写一个模式,能匹配出所有的邮件地址;

#egrep-o"[[:alnum:]]+\@[[:alnum:]]+\.[[:alnum:]]"

7.查找/var目录下属主为root,且属组为mail的所有文件或目录;

#find/var-userroot-a-groupmail

8.查找当前系统上没有属主或属组的文件

进一步:查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录;

#find/-nouser-o-nogroup

#find/\(-nouser-o-nogroup\)-atime-3

9.查找/etc目录下所有用户都有写权限的文件

#find/etc-perm-222

10.查找/etc目录下大于1M,且类型为普通文件的所有文件

#find/etc/-size+1M-typef-execls-lh{}\

11.查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的文件

#find/etc/init.d/-perm-113-typef

12.查找/usr目录下不属于root、bin或hadoop的文件

#find/usr/-not\(-userroot-o-userbin-o-userhadoop\)

13.查找/etc/目录下至少有一类用户没有写权限的文件

#find/etc/-not-perm-222

14.查找/etc目录下最近一周内其内容修改过,且不属于root或hadoop的文件

#find/etc-mtime-7-a-not\(-userroot-o-userhadoop\)
原文链接:https://www.f2er.com/regex/358864.html

猜你在找的正则表达式相关文章