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. jquery鼠标悬停事件hover()

    在JQuery中提供了.hover()事件,hover的第一个参数(匿名方法)表示mouseenter,第二个参数表示mouseleave,即表示可以为hover传递两个参数.如下代码所示: $( & ...

  2. PAT1106(BFS)

    PAT 1106 思路 BFS用在tree上,这一个题里主要关注的是用vector去保存每一个节点所连接的子节点,当BFS 时,一旦发现该节点下面没有子节点,这一层一定是最短的路径,然后用当前的层数去 ...

  3. java基础知识(2)---语法基础

    二:java语法基础: 1,关键字:其实就是某种语言赋予了特殊含义的单词. 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词. 2,标示符:其实就是在程序中自定义的名词.比如类名,变量名 ...

  4. 关于surf显示立体图,可视化分析数据

    如果想判断一个点(x,y)对应的ZV值是否在平面上方.平面上.平面下方,只要将(x,y)带入方程,得到z. 如果ZV大于>Z,则在平面上方:如果ZV<Z,则在方面下方:若ZV=Z,则在平面 ...

  5. C# 判断路径和文件存在

    1.判断路径是否存在,不存在则创建路径: if (!System.IO.Directory.Exists(@"D:\Export")) { System.IO.Directory. ...

  6. linux压缩包安装jdk

    1.下载jdk压缩包 $ wget http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa00 ...

  7. p2345 奶牛集会

    传送门 题目 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶 ...

  8. 解决Umbraco中Generated文件夹下面model问题

    在Visual Studio中开发Umbraco项目时,有一个文件夹叫Generated, 在Umbraco 的back office中的Document Type产生的model都会自动进入这个文件 ...

  9. MVC5手工添加System.Web.Optimization

    VS2012web手工添辑一个空的mvC5的项目,添加EF6的支持,在别的项目里复制了母版页_Layout.cshtml过来,发现Styles.Render未引用,这个引用使用的命名空间是System ...

  10. jq中打开新页面 并获取携带值

    打开新页面:window.location.href = "./index.html?id=1"获取携带值: function GetRequest() { var url = l ...