(转)linux正则表达式详解
linux正则表达式详解
http://blog.csdn.net/wuliowen/article/details/64131815
1:什么是正则表达式:
2:一些参数:
grep [-A] [-B] [--color=auto] '收索字符串' filename
452:[ 11.213498] 8021q: adding VLAN 0 to HW filter on deviceeth0
发现除了eth会有特殊的颜色,且加上行号显示。
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.
三:基础正则表达式练习:
例1:查找特定字符串
5:Annabell:Cho:90:1
8:Rebecca:Fabry:60:1
[root@Master ~]#
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:利用中括号[]来查找集合字符。
例3:行首和行尾字符^$
2:Henriette:Balla:30:1
21:Elsa:Casazza:60:3
四:基础正则表达式字符:
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正则表达式详解的更多相关文章
- Linux 正则表达式详解
正则表达式(REGULAR):为处理大量的字符串而定义的一套规则和方法,为了处理大量字符串而生 常见命令参数 基础正则表达式 . :有且只有任意一个字符(包括空格) * :重复前面任意0或者多个字符 ...
- [转]Linux 正则表达式详解
转自:http://www.jb51.net/article/42989.htm 一.linux文本查找命令 在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令: 1.gre ...
- Linux文本处理三剑客之grep及正则表达式详解
Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...
- Linux命令详解之—tail命令
tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文 ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- Linux命令详解之—less命令
Linux下还有一个与more命令非常类似的命令--less命令,相比于more命令,less命令更加灵活强大一些,今天就给大家介绍下Linux下的less命令. 更多Linux命令详情请看:Linu ...
- Linux命令详解之—more命令
Linux more命令同cat命令一样,多用来查看文件内容,本文就为大家介绍下Linux more命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux的more命令类似 ca ...
- 【转】linux命令详解:md5sum命令
[转]linux命令详解:md5sum命令 转自:http://blog.itpub.net/29320885/viewspace-1710218/ 前言 在网络传输.设备之间转存.复制大文件等时,可 ...
随机推荐
- 【转】 Pro Android学习笔记(四九):ActionBar(2):Action图标区
目录(?)[-] ActionBar的隐藏和现实 ActionBar的action图标区 ActionBar的隐藏和现实 ActionBar bar = getActionBar();bar.hide ...
- hibernate 持久化对象的生命周期
持久化对象的生命周期 瞬态(自由态) 表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象 ...
- PhpStorm选中相同文字高亮
1.Setting(设置)->plugins->Browse Repositories 输入BrowseWordAtCaret 搜索,安装,然后重启: 2.Setting(设置) -> ...
- C语言学习笔记--单引号和双引号
(1)C 语言中单引号用来表示字符字面量(是个数值)被编译为对应的 ASCII 码 (2)C 语言中双引号用来表示字符串字面量(是个指针)被编译为对应的内存地址 例如:'a'表示字符字面量(97),在 ...
- ffmpeg+HLS实现直播与回放
Nginx配置视频服务器 server { listen ; server_name localhost; location /hls{ add_header Access-Control-Allow ...
- Java探索之旅(18)——多线程(2)
1 线程协调 目的对各线程进行控制,保证各自执行的任务有条不紊且有序并行计算.尤其是在共享资源或者数据情况下. 1.1 易变volatile cache技术虽然提高了访问数据的效率,但是有可能导致主存 ...
- 6.5 Ubuntu中安装搜狗输入法
传统的方式:http://www.cnblogs.com/zlslch/p/6943318.html 最简单的方式:
- 2.XML实体注入漏洞攻与防
XML实体注入基础 当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件.执行系统命令.探测内网端口.攻击内网网站等危害. 简单了解XML以后,我们知道要在XML中使用特殊字符,需要使用实体字符 ...
- C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法
1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName ...
- Note: Migratory Compression: Coarse-grained Data Reordering to Improve Compressibility
思路/方法 设计了Migratory Compression. 调整chunk相对位置,将相似chunk排列在一起,通过压缩来减少data store占用的实际存储空间. https://en.wik ...