Linux正则表达式Linux正则表达式
正则表达式获取括号内容⼀、grep/egrep ⼯具的使⽤
该命令的格式为: grep [-cinvABC]‘ word' filename,其常⽤的选项如下所⽰。
-c:不是打印符合要求的⾏数;
-i:表⽰忽略⼤⼩写;
-n:表⽰输出符合要求的⾏及其⾏号;
-v:表⽰打印不符合要求的⾏;
-A:后⾯跟⼀个数字(有⽆空格都可以),例如-A2表⽰打印符合要求的⾏以及下⾯两⾏;
-B:后⾯跟⼀个数字,例如-B2表⽰打印符合要求的⾏以及上⾯两⾏;
-C:后⾯跟⼀个数字,例如-C2表⽰打印符合要求的⾏以及上下两⾏。
下⾯是对于-A2、-B2、-C2⽤法的演⽰:
1. 过滤出带有某个关键词的⾏,并输出⾏号
格式:grep -n ‘关键词’ 【⽂件】
2.过滤处不带有某个关键词的⾏,并输出⾏号
格式:grep -nv ‘关键词’ 【⽂件】
3.过滤出所有包含数字的⾏
格式:grep ‘[数字范围]’ 【⽂件】
4.过滤出所有不包含数字的⾏
格式:grep -v ‘[数字范围]’ 【⽂件】
5.过滤掉所有以#开头的⾏
格式:grep -v '^#'【⽂件】
6.过滤掉所有空⾏和以#开头的⾏
在正则表达式中,^表⽰⾏的开始,$ 表⽰⾏的结尾,那么空⾏则可以⽤^$表⽰。格式:grep -v '^#' 【⽂件】 | grep -v ‘^$’
如何打印出不以英⽂字母开头的⾏呢:
格式:grep '^[^a-zA-Z]'【⽂件】
[^字符]表⽰除[ ]内字符之外的字符,在正则表达式中,^表⽰⾏的开始,$表⽰⾏的结尾。
7.过滤出任意⼀个字符和重复字符
格式:grep '字符.字符' filename
.表⽰任意⼀个字符。下例中,r.o 表⽰把 r 与o之间有⼀个任意字符的⾏过滤出来。
*表⽰零个或多个*前⾯的字符。下例中,ooo*表⽰oo、ooo、oooo.. 或者更多的o。
下例中,. *表⽰零个或多个任意字符,空⾏也包含在内,它会把/etc/passwd⽂件⾥⾯的所有⾏都匹配到。
8.指定要过滤出的字符出现次数
` 格式:grep '字符\{数字\}' filename`
这⾥⽤到了符号{ },其内部为数字,表⽰前⾯的字符要重复的次数。需要强调的是,{ }左右都需要加上转义字符\。另外,使⽤“{ }”还可以表⽰⼀个范围,具体格式为{n1,n2},其中n1<n2,表⽰重复n1到n2次前⾯的字符,n2还可以为空,这时表⽰⼤于等于n1次。
9.过滤处⼀个或多个指定的字符
egrep是grep的扩展版本,可以完成grep不能完成的⼯作。
格式:egrep '字符+' filename
和grep不同,这⾥egrep使⽤的是符号+,它表⽰匹配1个或多个 + 前⾯的字符,这个“+”是不⽀持被grep直接使⽤的。包括上⾯的{ } ,也是可以直接被egrep使⽤,⽽不⽤加\转义,⽰例如下:
10.过滤处零个或⼀个指定的字符
格式:egrep '字符?' filename
11.过滤出字符串1或者字符串2
格式:egrep '字符|字符|字符' filename
格式:egrep '字符(字符|字符)字符' filename
这⾥⽤()表⽰⼀个整体,上例中会把包含rooo或者rato的⾏过滤出来,另外也可以把()和其他符号组合在⼀起,例如(oo)+就表⽰1个或者多个oo。如下所⽰:
⼆、sed⼯具的使⽤
1.打印某⾏
格式:sed -n ‘n’p filename
单引号内的n是⼀个数字,表⽰第⼏⾏。-n选项的作⽤是只显⽰我们要打印的⾏,⽆关紧要的内容不显⽰。
可以去掉 -n 选项对⽐⼀下差异。要想把所有⾏都打印出来,可以使⽤命令sed -n '1,$'p filename,如下所⽰:
也可以指定⼀个区间打印,如下所⽰:
2.打印包含某个字符串的⾏
格式:sed -n ‘/字符串/’p filename
这种⽤法就类似于grep了,在grep中使⽤的特殊字符(如^、$、.、*等)同样也能在sed中使⽤,如下所⽰:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论