1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 正则表达式中grep sed的用法(包括基本的正则表达式和扩展的正则表达式)

正则表达式中grep sed的用法(包括基本的正则表达式和扩展的正则表达式)

时间:2019-08-09 17:22:54

相关推荐

正则表达式中grep sed的用法(包括基本的正则表达式和扩展的正则表达式)

一正则表达式

BasicREGEXP:基本正则表达式

ExtendedREGEXP:扩展正则表达式

(正则表达式是使得计算机变成智能化的重要途径)

1.1基本正则表达式

.:表示匹配任意单个字符

[]:匹配指定范围内的任意单个字符

[^]:匹配指定范围外的任意单个字符

字符匹配

*:匹配其前面的字符任意次

\?:其前的字符是可有可无的

\{m,n\}:匹配其前的字符至少m次,至多n次

\{0,n\}:匹配其前的字符少为0次,至多n次

\{m,\}:匹配其前的字符至少m次,没有上限

.*:匹配其前面的任意长度的任意字符

位置锚定锚定:

^:锚定行首

$:锚定行尾

\<,\b:锚定词首

\>,\b:锚定词尾

\(\):锚定分组

\1,\2,\3,...:后向引用

grep:使用基本正则表达式定义的模式来过滤文本的命令;

-E:使用扩展的正则表达式

-i:忽略字符大小写

-v:匹配到的字符串不显示

-o:只显示匹配到的字符串

--color:显示匹配到的颜色

-A#:显示匹配到的行及其后的行eg:grep--color-A2'^coreid'/proc/cpuinfo显示coreid行及其后面的两行

-B#:显示匹配到的行及其前的行eg:grep--color-A2'^coreid'/proc/cpuinfo显示coreid行及其前面的两行

-C#:显示匹配到的行及其前后的行eg:grep--color-C2'^coreid'/proc/cpuinfo上下都两行,表示上下文

1.2扩展正则表达式

字符匹配:

.:表示匹任意单个字符

[]:匹配指定范围内的任意单个字符

[^]:匹配指定范围外的任意单个字符

次数匹配:

*:匹配其前面的字符任意次

?:匹配其前的字符是可有可无的

+:匹配其前面的字符至少一次

{m,n}:匹配其前的字符至少m次,至多n次

位置锚定:

^:锚定行首

$:锚定行尾

\<,\b:锚定词首

\>,\b:锚定词尾

分组:(扩展正则表达式中才真正实现分组的意义)

():分组

\1,\2,\3,...

扩展正则表达式还支持一个特殊的字符:或者

|:or

C|cat:表示C或categ:grep--color-E'C|cat'test1.txt

(C|c)at:表示Cat或categ:grep--color-E'(C|c)at'test1.txt

eg:grep--color-E'^[[:space:]]+'/boot/grub/grub.conf引用至少一次空白字符开头的行

grep-E=egrep(二者表达的意义相同)

1.3实例分析

找出/boot/grub/brug.conf文件中的1-255之间的数字

eg:egrep--color'\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'/boot/grub/brug.conf

eg:ifconfig|egrep--color'(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'

eg:ifconfig|egrep'\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'

找出ifconfig命令中1-255之间的数字执行结果的IP地址

eg:ifconfig|egrep--color'(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'

eg:ifconfig|egrep-o'(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'只显示匹配到的串本身

精确找出ifconfig命令中1-255之间的数字执行结果中的IP地址

eg:egrep--color'\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3]\>(\.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5)\>'

IPv4:(A,B,C,D,E)

A:1-127

B:128-191

C:192-223

fgrep(fastgrep快速搜索grep):不支持正则表达式

二sed的基本用法

2.1sed:StreamEDitor行编辑器,只适合编辑纯ASSIC码的文本,实现逐行处理文本(全屏编辑器:vi)

sed:模式空间(内存空间)

默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;

sed[options]’AddressCommand'file...对这个或这些文件当中的符合这个地址指定范围内行执行以上编辑命令

-n:静默模式,不再默认显示模式空间中的内容

-eSCRIPT-eSCRIPT:可以同时指定多个脚本

-i:直接修改原文件

-f/PATH/TO/SED_SCRIPT

sed-f/path/to/scriptsfile

-r:表示使用扩展正则表达式

eg:history|sed's#[[:space:]]##g'查找空白字符替换成什么也没有,删除空白字符

eg:histpry|sed'S#[[:space:]]##g'查找空白字符,把空白字符替换成什么也没有

eg:history|sed's#^[[:space:]]##g'查找行首的空白字符,把行首的空白字符替换成什么也没有

eg:history|sed's#^[[:space:]]*##g'|cut-d''f1查找行首的空白字符,把行首的空白字符替换成什么也没有

2.2Address(地址指令方法)

1、StartLine,EndLine(从起始行到结束行用“,"隔开)

比如1,1001到100行

$:倒数第一行

$-1:倒数第二行

2、/RegExp/使用正则表达式指定模式

eg:/^root/以root字符串开头的行

3、/pattern1/,/pattern2/

第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行

4、LineNumber

指定的行(精确到某行)

5、StartLine,+N

从StartLine(指定的行)开始,向后的N行

2.3Command

d:删除符合条件的行

eg:sed‘1d'/etc/fstab只删除第1行

eg:sed‘1,2d'/etc/fstab删除第1,2行

eg:sed‘1,$-1d'/etc/fstab删除第1行到倒数第2行

eg:sed‘1,+2d'/etc/fstab删除3行

eg:sed‘/oot/d'/etc/fstab删除指定文件中包含oot的行

eg:sed'/^\//d'/etc/fstab删除文件中以”/"开头的行

p:显示符合条件的

eg:sed'/^\//p'/etc/fstab显示文件中以”/"开头的行

a\string:在指定的行后面追加新行,内容为string

eg:sed'/^\//a\#helloword'/etc/fstab

\n:可用于换行

eg:sed'/^\//a\#helloword\n#hello,linux'/etc/fstab

i\string:在指定的行前面添加新行,内容为string

rFILE:将指定的文件的内容添加至符合条件的行数

eg:sed'2r/etc/issue'/etc/fstab把文件内容添加到第二行

eg:sed'1,2r/etc/issue'/etc/fstab把文件内容添加到第一行和第二行后面

wFILE:将地址指定的范围内的行另存至指定的文件中

eg:sed'/oot/w/tmp/oot.txt'/etc/fstab把oot保存至tmp文件下

s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被模式匹配到的字符串

eg:sed’s/oot/OOT'/etc/fstab把指定文件中的oot换成OOT

如果想每一行当中所有出现过的都替换要加修饰符;

加修饰符

g:全局替换

i:忽略字符大小写

s///:s###,s@@@

\(\),\1,\2

&:引用模式匹配到的整个串

eg:sed's@/@#@g'/etc/fstab

eg:nanosed.txt

hello,like

hi,mylove.

sed's#l..e#&r#g'sed.txt把以l开头e结尾的字符串后面加上r或写为sed's#\(l..e\)#\lr#g'sed.txt

sed's#l\(..e)#L\l#g'sed.txt把l..e中的l换成L

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。