linux正则表达式详解

http://blog.csdn.net/wuliowen/article/details/64131815

1:什么是正则表达式:

简单的说,正则表达式就是处理字符串的方法,它是以行为单位进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易达到查找,删除,替换某特定字符串的处理程序。

2:一些参数:
grep [-A] [-B] [--color=auto] '收索字符串' filename

-A :后面可加数字,为after的意思,除了列出该行以外,后续的n行也被列出来。
-B :后面可加数字,为befer的意思,除了列出该行以外,前面的n行也被列出来。
--color=auto:可将正确的那个选取数据列出颜色
范例一:
dmesg | grep 'eth'
#dmesg 可以列出内核的信息,通过grep选取网卡相关信息。
范例二:
dmesg | grep -n --color-auto 'eth'
[root@Slave0 hadoop]# dmesg | grep -n --color=auto 'eth'
452:[   11.213498] 8021q: adding VLAN 0 to HW filter on deviceeth0
发现除了eth会有特殊的颜色,且加上行号显示。
范例三:
dmesg | grep -n -A3  -B2 --color=auto 'eth'
450-[   11.213478] 802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
451-[   11.213482] All bugs added by David S. Miller <davem@redhat.com>
452:[   11.213498] 8021q: adding VLAN 0 to HW filter on deviceeth0
453-[   11.334391] cnic: Broadcom NetXtreme II CNIC Driver cnic v2.5.20 (March 14, 2014)
454-[   11.355742] bnx2fc: Broadcom NetXtreme II FCoE Driver bnx2fc v2.4.2 (Dec 11, 2013)
455-[   11.371077] netlink: 12 bytes leftover after parsing attributes.
发现除了eth会有特殊的颜色,且加上行号显示。且452的前两行,452的后三行也显示出来了。

三:基础正则表达式练习:

例1:查找特定字符串

[root@Master ~]# grep -n 'ab' newusers
5:Annabell:Cho:90:1
8:Rebecca:Fabry:60:1
[root@Master ~]# 
如果反向选择呢?也即是说该行没有‘ab’这个字符串才会显示在屏幕上
[root@Master ~]# grep -vn 'ab' newusers
1:Betsey:Werts:60:1
2:Henriette:Balla:30:1
3:Julieann:Hopps:30:2
4:Conrad:Menz:60:1
6:Allyn:Kenley:60:1

例2:利用中括号[]来查找集合字符。

如果我想找testhe taste这两个单词,可以发现,他们共同有‘t?st’存在,这个时候,我们可以这样查找。
grep -n 't[ae]st' newusers
如果查找到有dd字符时,则使用:
grep -n 'dd' newusers
如果不想要dd前面有g,此时可以可用集合字符的反向选择[^]来完成。
grep -n '[^g]dd' newusers

例3:行首和行尾字符^$

如果想要字符串‘the’只在行首才列出,之格式化就要用到制表符了,做法如下:
grep -n '^the' filename
如果要列出字母开头
grep -n '^[a-z]' filename
如果不想要开头是字母的
grep -n '^[^a-zA-Z]' filename
注:那个^符号在字符集合符号(中括号[])之内与之外是不一样的,在【】代表“反向选择”,在【】之外则代表定外在行首的意义。
那么如果要找出行位结束为小数点(.)的那一行,该怎么处理呢?
 grep -n '\.$' filename
特别注意,小数点具有其他意义,所以必须使用转义字符(\)加以解除他的特殊意义。
如果要找出空白行:
grep -n '^$' filename
例4:任意一个字符.与重复字符*
.(小数点):代表一定有一个任意字符的意思
grep -n 'g..d' filename
[root@Master ~]# grep -n a..a newusers
2:Henriette:Balla:30:1
21:Elsa:Casazza:60:3
*(星号):代表重复前一个0到无穷多次的意思,为组合形态。
grep -n 'ooo*' filename
注,前两个o肯定要必须存在,第三个o则是可有可无的多个o

四:基础正则表达式字符:

RE字符 意义和范例
^word 查找(word)在行首
word$ 查找(word)在行尾
. 代表一定有一个任意的字符
\ 将特殊符号的特殊意义去除
* 重复零个到无穷多个的前一个字符
[list] 从字符集合的RE字符里面找出想要选取的字符
[n1-n2] 从字符集合的RE字符里面找出想要选取的字符范围.如:grep -n '[0-9]' filename
[^list] 从字符集合的RE字符里面找出不要的字符串范围。
\{n,m\} 连续n到m个前一个RE字符,若为\{n\}则是连续n个的前一个RE字符,若为\{n,\}则是连续
n个以上的前一个RE字符,
范例:在g与g之间有2到3个o存在的字符串即(goog)(gooog)
grep -n 'go\{2,3\}g' filename

原文:http://www.moozsec.com/post-31.html

grep命令的扩展正则表达式可用egrep表示,也可以用grep -E来表示;

egrep:        

    支持扩展的正则表达式实现类似于grep文本过滤功能;等同于grep -E;

    用法:
egrep [OPTIONS] PATTERN [FILE...]
OPTIONS:
-i:ignorecase,忽略字符的大小写;
-o:仅显示匹配到的字符串本身;
-v, --invert-match:反向显示,显示不能被模式匹配到的行;
-E:支持使用扩展的正则表达式元字符;
-q, --quiet, --silent:静默模式,即不输出任何信息;
-A #:after,显示匹配到的字符串后#行
-B #:before,显示匹配到的字符串前#行
-C #:依次类推;
-G:支持基本正则表达式; 扩展正则表达式的元字符:
字符匹配:
.:匹配任意单个字符;
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符;
[:digit:]、[:lower:]、[:upper:]、[:alnum:]、[:alpha:]、[:space:]、[:punct:]
次数匹配
*:匹配其前面的字符任意次:0,1,多次;
.*:匹配任意长度的任意字符;
?:匹配其前面的字符0次或1次,即其前面的字符是可有可无的;
+:匹配其前面的字符1此或多次;即其前面的字符要至少出现一次;
{m}:匹配其前面字符m次;
{m,n}:匹配其前面的字符至少m次,至多n次;
{0,n}:至多n次;
{m,}:至少m次;
位置锚定
^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^PATTERN$:用于PATTERN来匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行; 单词:非特殊字符组成的连续字符(字符串)都称为单词; \<或\b:词首锚定,用于单词模式的左侧;
\>或\b:词尾锚定,用于单词模式的右侧;
\<PATTERN\>:匹配完整单词;
分组及引用
():将一个或多个字符捆绑在一起,当作一个整体进行处理;
如:(xy)*ab Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量为:
后向引用:\1,\2,...

a|b:a或者b;
如:C|cat的意思是C或cat
(c|C)at:cat或Cat;
示例:
1、找出/etc/passwd文件中两位数或三位数;
~]# grep -E "\<[[:digit:]]{2,3}\>" /etc/passwd 2、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面存在非空白字符的行;
~]# grep -E "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg 3、找出/proc/meminfo文件中,所有以大写或小写S开头的行;至少有两种实现方式;
~]# grep -i "^s" /proc/meminfo
~]# grep -E "(s|S)" /proc/meminfo
~]# grep "^[sS]" /proc/meminfo 4、显示当前系统上root、centos或user1用户的相关信息;
]# grep -E "^(root|centos|user1)\>" /etc/passwd 5、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;
~]# grep -Eo "^[_[:alnum:]]+\(\)" /etc/rc.d/init.d/functions 6、使用echo命令输出一个绝对路径,使用egrep取出其基名;
~]# echo /etc/rc.d/init.d/functions | grep -Eo "[^/]+/?$"
进一步:取出其路径名;类似于对齐执行dirname命令的结果;
~]# echo /etc/rc.d/init.d/functions | grep -Eo "^/.*/" 7、找出ifconfig命令结果中1-255之间的数值;
~]# ifconfig | grep -Eo "\<[1-9]|[1-9][0-9]|1([0-9]{2})|2[0-4][0-9]|25[0-5]\>" 8、找出ifconfig命令结果中的IP地址;
~]# ifconfig | grep -Eo "\<(([0-9]|[1-9][0-9]|1([0-9]){2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1([0-9]){2}|2[0-4][0-9]|25[0-5])" 9、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;
~]# useradd bash
~]# useradd testbash
~]# useradd basher
~]# useradd -s /sbin/nologin nologin
~]# grep -E "^([^:]+\>).*\1$" /etc/passwd fgrep:不支持正则表达式元字符;
当无需用到元字符去编写模式时,使用fgrep性能更好;代码数量越多使用显示性能效果更为明显;

文本查看及处理工具:wc,cut,sort,uniq,diff,patch

wc:word count
功能:
print newline, word, and byte counts for each file
打印文件的行、字、字节数;
wc [OPTION]... [FILE]...
OPTIONS:
-l:lines 仅打印行
-w:words 仅打印字
-c:bytes 仅打印字节 cut:remove sections from each line of files
删除文件的某一行的某一部分;
cut OPTION... [FILE]...
OPTIONS:
-d CHAR:以指定字符为分隔符;
-f FILES:挑选出的字段;
#:指定的单个字段;
#-#:连续的多个字段;
#,#:离散的多个字段; sort:sort lines of text files
对文本文件的行进行排序;
sort [OPTION]... [FILE]...
-t CHAR:指定分隔符;
-k #:用于排序指定
-n:基于数值大小而非字符进行排序;
-r:逆序排序;
-f:忽略字符大小写;
-u:重复的行只保留一份;
重复行:连续且相同; uniq:report or omit repeated lines
报告或移除重复的行;
uniq [OPTION]... [INPUT [OUTPUT]]
-c:显示每行的重复次数
-u:仅显示未曾重复的行;
-d:仅显示重复的行; diff:compare files line by line
逐行比较两个文件不同之处;
diff [OPTION]... FILES diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE>/PATH/TO/PATCH_FILE
-u:使用unfied机制,即显示要修改的行的上下文,默认为3行; patch:向文件打补丁;
patch [OPTIONS] -i /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE 示例:取出ifconfig eno16777736命令中的ip地址;
~]# ifconfig eno16777736 | head -2 | tail -1 | tr -s " " | cut -d " " -f3

(转)linux正则表达式详解的更多相关文章

  1. Linux 正则表达式详解

    正则表达式(REGULAR):为处理大量的字符串而定义的一套规则和方法,为了处理大量字符串而生 常见命令参数 基础正则表达式 . :有且只有任意一个字符(包括空格) * :重复前面任意0或者多个字符 ...

  2. [转]Linux 正则表达式详解

    转自:http://www.jb51.net/article/42989.htm 一.linux文本查找命令 在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令: 1.gre ...

  3. Linux文本处理三剑客之grep及正则表达式详解

    Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...

  4. Linux命令详解之—tail命令

    tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文 ...

  5. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  6. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  7. Linux命令详解之—less命令

    Linux下还有一个与more命令非常类似的命令--less命令,相比于more命令,less命令更加灵活强大一些,今天就给大家介绍下Linux下的less命令. 更多Linux命令详情请看:Linu ...

  8. Linux命令详解之—more命令

    Linux more命令同cat命令一样,多用来查看文件内容,本文就为大家介绍下Linux more命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux的more命令类似 ca ...

  9. 【转】linux命令详解:md5sum命令

    [转]linux命令详解:md5sum命令 转自:http://blog.itpub.net/29320885/viewspace-1710218/ 前言 在网络传输.设备之间转存.复制大文件等时,可 ...

随机推荐

  1. Poj 1973 Software Company(二分+并行DP)

    题意:软件公司接了两个项目,来自同一个合同,要一起交付.该公司有n个程序猿来做这两个项目A和B,每个项目都被分为m个子项目,给定每个程序猿做一个A中的子项目需要的时间Xi秒,和做B中的子项目所需时间Y ...

  2. 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

    可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...

  3. Scala总结

    Scala总结 ===概述 scala是一门以Java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言. scala是纯粹的面向对象的语言.java虽然是面 ...

  4. CUDA V9.2 sample编译问题

    这个哥们也遇到一样的问题 CUDA 9.1/9.2 与 Visual Studio 2017 (VS2017 15.6.4) 的不兼容问题 错误有显示 #if _MSC_VER < 1600 | ...

  5. IIS备份和还原

    当我们电脑系统有大量的站点和虚拟目录的时候,电脑因为种种原因需要重做系统,那么重装系统后这些站点我们是否只能一个一个的添加,如果有成百上千个站点呢,任务量可想而知,本文将介绍如何备份和还原window ...

  6. 问题:ExecuteNonQuery 与 ExecuteScalar 结果: ExecuteNonQuery方法和ExecuteScalar方法的区别

    ExecuteNonQuery方法和ExecuteScalar方法的区别 ----ExecuteNonQuery():执行命令对象的SQL语句,返回一个int类型变量,如果SQL语句是对数据库的记录进 ...

  7. 2.JasperReports学习笔记2-创建简单的报表例子

    转自:http://www.blogjava.net/vjame/archive/2013/10/12/404908.html 一.创建简单的jrxml文件 这里可以手动创建jrxml文件,也可以使用 ...

  8. [51nod1119]机器人走方格V2

    解题关键: 1.此题用dp的方法可以看出,dp矩阵为杨辉三角,通过总结,可以得出 答案的解为$C_{n + m - 2}^{n - 1}$ 2.此题可用组合数学的思想考虑,总的步数一共有$n+m-2$ ...

  9. Python通过调用windows命令行处理sam文件

    Python通过调用windows命令行处理sam文件 以samtools软件为例 一.下载或者索取得到windows版本的samtools软件,解压后如下: 进入文件内部,有如下几个文件: 二.将s ...

  10. ubuntu 下minicom超级终端的使用方法

    http://blog.chinaunix.net/uid-25909619-id-3184639.html Ubuntu下使用sshfs挂载远程目录到本地 http://blog.csdn.net/ ...