正则基础

最近在看shell,这些又丢了,赶紧回来重新复习复习。

一、grep/egrep
1. 语法+选项
语法: grep  [-cinvABC]  ‘word‘  filename
-c :打印符合要求的行数
-n :在输出符合要求的行的同时连同行号一起输出
-v :打印不符合要求的行
-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行
-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行  
-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行
-r : 会把目录下面所有的文件全部遍历

2. 例子介绍
过滤出带有某个关键词的行并输出行号 grep -n ‘root‘ 1.txt
过滤出不带有某个关键词的行并输出行号grep -n -v ‘root‘ 1.txt
过滤出所有包含数字的行 grep ‘[0-9]‘ 1.txt
过滤出所有不包含数字的行 grep -v ‘[0-9]‘ 1.txt
去除所有以‘#‘开头的行 grep -v ‘^#‘ 1.txt
去除所有空行和以‘#‘开头的行 grep -v ‘^$‘ 1.txt|grep -v ‘^#‘
过滤出以英文字母开头的行 grep ‘^[a-zA-Z]‘ 1.txt
过滤出以非数字开头的行 grep ‘^[^0-9]‘ 1.txt
过滤任意一个或多个字符 grep ‘r.o‘ 1.txt; grep ‘r*t‘ 1.txt; grep ‘r.*t‘ 1.txt  
. 表示任意一个字符;*表示零个或多个前面的字符 ;.*表示零个或多个任意字符,空行也包含在内
指定过滤字符次数 grep ‘o\{2\}‘ 1.txt

3. egrep
egrep工具 是grep工具的扩展
egrep ‘o+‘ 1.txt   表示1个或1个以上前面字符
egrep ‘o?‘ 1.txt  表示0个或者1个前面字符
egrep ‘roo|body‘ 1.txt  匹配roo或者匹配body
egrep ‘r(oo)|(at)o‘ 1.txt 用括号表示一个整体
egrep ‘(oo)+‘ 1.txt 表示1个或者多个 ‘oo‘

4. . * + ? 总结
. 表示任意一个字符(包括特殊字符)
* 表示零个或多个*前面的字符
.* 表示任意个任意字符(包含空行)
+ 表示1个或多个+前面的字符
? 表示0个或1个?前面的字符
其中,+ ? grep不支持,egrep才支持。

二.sed

打印指定行 sed ‘10‘p -n 1.txt; sed ‘1,4‘p -n 1.txt; sed ‘5,$‘p -n 1.txt
打印包含某个字符串的行 sed -n ‘/root/‘p 1.txt 可以使用 ^ . * $等特殊符号
-e 可以实现同时进行多个任务 sed -e ‘/root/p‘ -e ‘/body/p‘ -n 1.txt 也可以用;实现  sed  ‘/root/p; /body/p‘ -n 1.txt
删除行 sed ‘/root/d‘ 1.txt;   sed ‘1d‘ 1.txt; sed ‘1,10d‘ 1.txt
替换 sed ‘1,2s/ot/to/g‘ 1.txt, 其中s就是替换的意思,g为全局替换,否则只替换第一次的,/也可以为 #, @ 等
删除所有数字 sed ‘s/[0-9]//g‘ 1.txt
删除所有非数字  sed ‘s/[^0-9]//g‘ 1.txt
调换两个字符串位置 head -n2 1.txt |sed ‘s/\(root\)\(.*\)\(bash\)/\3\2\1/‘
直接修改文件内容 sed -i ‘s/ot/to/g‘ 1.txt

三.awk

截取文档中的某段

awk -F ‘:‘ ‘{print $1}‘ 1.txt

-F 指定分隔符号为  :

也可以会用自定义字符连接每个段

awk -F ‘:‘ ‘{print $1"#"$2"#$3}‘ 1.txt

或者使用awk内部变量OFS

awk -F ‘:‘ ‘{OFS="#"} {print $1,$2,$3}‘ 1.txt

匹配字符或者字符串

awk ‘/oo/‘ 1.txt

针对每个段匹配

awk -F ‘:‘ ‘$1 ~/oo/‘ 1.txt

多次匹配

awk -F ‘:‘  ‘/root/ {print $1,$3}; $1 ~/test/;$3 ~/20/‘ 1.txt

条件操作符号

第三段为0

awk -F ‘:‘ ‘$3=="0"‘ 1.txt

第三段大于等于500

awwk -F ‘:‘ ‘$#>=500‘ 1.txt

.......

awk内置变量 NF(段数) NR(行数)

head -n3 1.txt | awk -F ‘:‘ ‘{print NF}‘

head -n3 1.txt | awk -F ‘:‘ ‘{print $NF}‘

head -n3 1.txt | awk ‘:‘ ‘{print NR}‘

打印20行以后的行

awk ‘NR>20‘ 1.txt

打印20行以后并且第一段包含‘ssh‘的行

awk -F ‘NR>20&&$1 ~/ssh/‘

更改某个段的值

awk -F ‘:‘ ‘$1="root"‘ 1.txt

数学计算, 把第三段和第四段值相加,并赋予第七段

awk -F ‘:‘ ‘{$7=$3+$4; print $0}‘ 1.txt

计算第三段的总和

awk -F ‘:‘ ‘{(tot=tot+$3)}; END {print tot}‘ 1.txt

awk中也可以使用if关键词

awk -F ‘:‘ ‘{if ($1=="root") print $0}‘ 1.txt

时间: 2024-10-19 11:21:45

正则基础的相关文章

.NET正则基础——.NET正则类及方法应用

1        概述 初学正则时,对于Regex类不熟悉,遇到问题不知道该用哪种方法解决,本文结合一些正则应用的典型应用场景,介绍一下Regex类的基本应用.这里重点进行.NET类的介绍,对于正则的运用,不做深入探讨. 正则的应用最终都是进行模式的匹配,而根据目的的不同,基本上可以分为以下几种应用:验证.提取.替换.分割.结合.NET提供的控件.类以及类的方法,可以很方便的实现这些应用. 以下将结合一些典型的应用场景,对.NET中常见的类.方法及属性进行介绍.本文旨在.NET类基础用法的引导,

正则基础之——贪婪与非贪婪模式

转载自:http://blog.csdn.net/lxcnn/article/details/4756030 1        概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: “{m,n}”.“{m,}”.“?”.“*”和“+”. 在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”

.NET正则基础之——平衡组

1        概述 平衡组是微软在.NET中提出的一个概念,主要是结合几种正则语法规则,提供对配对出现的嵌套结构的匹配..NET是目前对正则支持最完备.功能最强大的语言平台之一,而平衡组正是其强大功能的外在表现,也是比较实用的文本处理功能,目前只有.NET支持,相信后续其它语言会提供支持. 平衡组可以有狭义和广义两种定义,狭义平衡组指.NET中定义的(?<Close-Open>Expression)语法,广义平衡组并不是固定的语法规则,而是几种语法规则的综合运用,我们平时所说的平衡组通常指

【转】正则基础之——捕获组(capture group)

http://blog.csdn.net/lxcnn/article/details/4146148 1        概述 1.1     什么是捕获组 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用.当然,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部. 捕获组有两种形式,一种是普通捕获组,另一种是命名捕获组,通常所说的捕获组指的是普通捕获组.语法如下: 普通捕获组:(Expression) 命名捕获组:(?<name>Expr

Java提取文本文档中的所有网址(小案例介绍正则基础知识)

正则表达式基础以及Java中使用正则查找 定义: 正则表达式是一些用来匹配和处理文本的字符串 正则的基础(先大致了解下) 1. 正则表达式的作用 查找特定的信息(搜索) 替换一些文本(替换) 2. 正则基础知识 1. 元字符 . 匹配除换行符(\n)以外的任何单个字符 w 匹配字母.数字.下划线.汉字 s 匹配任意空白字符(包括空格.制表符.换页符等) d 匹配数字,匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 例子: #匹配abc开头的字符串 ^abd #匹配8位数字的QQ

正则基础之 \b 单词边界

本文转载自: http://www.jb51.net/article/19330.htm 1概述 “\b”匹配单词边界,不匹配任何字符. “\b”匹配的只是一个位置,这个位置的一侧是构成单词的字符,另一侧为非单词字符.字符串的开始或结束位置.“\b”是零宽度的. 基本上所有的资料里都会说“\b”是单词边界,但是关于“单词”的范围却是少有提及.通常情况下,正则表达式中所谓的“单词”,就是由“\w”所定义的字符所组成的子串. “\b”表示所在位置的一侧为单词字符,另一侧为非单词字符.字符串的开始或结

正则基础之 环视

1 环视基础 环视只进行子表达式的匹配,不占有字符,匹配到的内容不保存到最终的匹配结果,是零宽度的.环视匹配的最终结果就是一个位置. 环视的作用相当于对所在位置加了一个附加条件,只有满足这个条件,环视子表达式才能匹配成功. 环视按照方向划分有顺序和逆序两种,按照是否匹配有肯定和否定两种,组合起来就有四种环视.顺序环视相当于在当前位置右侧附加一个条件,而逆序环视相当于在当前位置左侧附加一个条件. 表达式 说明 (?<=Expression) 逆序肯定环视,表示所在位置左侧能够匹配Expressio

正则基础之——环视(Lookaround)

1 环视基础 环视只进行子表达式的匹配,不占有字符,匹配到的内容不保存到最终的匹配结果,是零宽度的.环视匹配的最终结果就是一个位置. 环视的作用相当于对所在位置加了一个附加条件,只有满足这个条件,环视子表达式才能匹配成功. 环视按照方向划分有顺序和逆序两种,按照是否匹配有肯定和否定两种,组合起来就有四种环视.顺序环视相当于在当前位置右侧附加一个条件,而逆序环视相当于在当前位置左侧附加一个条件. 表达式 说明 (?<=Expression) 逆序肯定环视,表示所在位置左侧能够匹配Expressio

JS中的正则基础

正则是用来处理字符串的规则 通过规则可以验证字符串是否匹配(test)对应的格式:也可以把正则匹配的结果在字符串中捕获(exec)到 正则的元字符分为:普通元字符:特殊元字符:量词元字符 普通元字符:用/ /包起来的除了具有特殊意义的,其余的都是代表本身意义的普通元字符 特殊元字符:\d =>0-9任意一个数字 ; \D=>除了0-9之间任意字符                \w =>匹配数字,字母,下划线当中的任意一个 ; \W =>匹配除了数字,字母,下划线当中的任意一个  

【C#正则基础】正则表达式

1. 代表任意多个字符:(.*?)2. 代表网页里的<body>*</body>任意的标签内容,替换以后网页源码就只剩纯文本:<[^>]*>3. 代表网页中的空格: 4. 四位0~9的数字,一般用来匹配验证码:[0-9]{4}5. 手机号正则式:\d{11}6. 密码正则式:[.*|\s*]\w{6,16}$7. 替换掉所有的换行空格等字符8. htmltext = htmltext.Replace("\t", "").Re