正则表达式与sed工具

╄→尐↘猪︶ㄣ 提交于 2020-03-01 05:04:07

1、正则表达式

 通俗来讲,正则表达式是一种字符串的匹配方式,比如使用星号“*”来匹配任意的字符等。正则表达式实际上是一个匹配模板,当bash执行这个正则表达式时,就会将所有的输入数据与匹配模板匹配,匹配不成功的数据将会被过滤掉。

1.常用的元字符

字符

含义

举例

.

匹配除换行符以外的任意字符

\bhi\b.*\bLucy\b

\w

匹配字母或数字或下划线或汉字

\bhe\w

\s

匹配任意的空白符(包括空格制表符换页符)

 

\b

匹配单词的开始或结束

\bhi\b

^

匹配字符串的开始

^g.*d$

$

匹配字符串的结束

grep ‘d$’ test.ini

2.常用的限定符

字符

含义

举例

*

重复零次或更多次

grep ‘o*’tet.ini

+

重复一次或更多次

[0-9]+匹配1个或更多的数字

?

重复零次或一次

 

{n}

重复n

^9{2}$

{n,}

重复n次或更多次

 

{n,m}

重复nm

 

3.常用的反义代码

/语法

说明

\W

匹配任意不是字母,数字,下划线,汉字的字符

\S

匹配任意不是空白符的字符

\B

匹配不是单词开头或结束的位置

[^x]

匹配除了x以外的任意字符

[^aeiou]

匹配除了aeiou这几个字母以外的任意字符

4.扩展正则表达式

字符

含义

举例

n,m

等同于基本正则表达式的\{n,m\}

egrep n 9{1,3} tmp

+

匹配前面一个字符出现一次或多次

egrep n go+d tmp

匹配前面一个字符出现零次或一次

egrep n go+d tmp

|

匹配逻辑或者,即匹配|前或后的字符串

egrep n adm|ftp tmp

egrep n (n|f)tp tmp

()

匹配正则集合

sed 's/\(root\)\(.*\)\(bash\)/\hei\2\hello/' tmp

 

2、sed工具

当用sed命令对文本进行处理的时候,sed先读取对象的文本文件的第一行到模式空间中。

当有内容进入模式空间时,sed的编辑命令对模式空间中的内容进行编辑操作(修改,替换,删除,追加,显示等等)

模式空间中的内容编辑处理完成之后,sed把此内容通过标准输出(默认为显示器)打印出来,并删除模式空间中的内容。

第一行处理结束。从新读取第二行的内容进行处理,直到最后一行。

2.1.sed基本语法

Sed [参数选项] {脚本指令} [输入文件]

2.2.  sed的命令和选项:

命令

功能描述

a\

在当前行的后面加入一行或者文本。

c\

用新的文本改变或者替代本行的文本。

d

pattern space位置删除行。

i\

在当前行的上面插入文本。

h

拷贝pattern space的内容到holding buffer(特殊缓冲区)

H

追加pattern space的内容到holding buffer

g

获得holding buffer中的内容,并替代当前pattern space中的文本。(替换最后一行)

G

获得holding buffer中的内容,并追加到当前pattern space的后面。(追加到最后一行)

n

读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。

p

打印pattern space中的行。               //小写

P

打印pattern space中的第一行。          //大写

q

退出sed

w file

写并追加pattern spacefile的末尾。

!

表示后面的命令对所有没有被选定的行发生作用。sed '/ftp/!a hello' tmp

s/re/string

string替换正则表达式re

=

打印当前行号码。

替换标记

g

行内全面替换,如果没有g,只替换第一个匹配。

p

打印行。

x

互换pattern spaceholding buffer中的文本。 sed -e '/adm/h' -e '/ftp/x' tmp

y

把一个字符翻译为另一个字符(但是不能用于正则表达式)Sed ‘y/a/A/’ tmp

选项

-e

允许多点编辑。

-n

取消默认输出。

-f

直接将sed的动作写在一个文件内

-i

直接修改文件内容,而不是输出到终端

-r

Sed的扩展表达式的用法

2.2.1.新增

在某一行后面加入新内容

sed ‘/匹配项/a\新增项文件名

匹配某一行,在这行前面加入新内容

sed ‘/匹配项/i\新增项文件名

在某一行的后面加入新内容

sed ‘3a 新增项文件名

匹配某一行,在这行前面加入新内容

sed ‘3i 新增项文件名

匹配某一行,在某一行的后面读入某文件的内容

sed ‘/匹配项/r 新增文件文件名

匹配某一内容,并将该内容写到其他文件中

Sed ‘/匹配项/w 其他文件名文件名

删除所有空行并在每一行的后面增加一个空行

sed ‘/^$/d;G’ 文件名

匹配某一行,把这一行加到所有行的后面

sed ‘/匹配项/h;G’文件名

2.2.2.替换

匹配某一内容并将该行第一个该内容替换

sed ‘s/匹配项/替换项/’文件名

匹配某一内容并全部替换该内容

sed ‘s/匹配项/替换项/g’文件名

匹配某一内容,并将该行内的另一内容替换

sed ‘/匹配项1/s/匹配项2/替换项2/’文件名

匹配某一项,并将含有该内容的整行替换

sed ‘/匹配项/c\替换项’文件名

2.2.3.删除

删除第几行

sed ‘3d’文件名

sed ‘$d’文件名

匹配某一行并删除

sed ‘/匹配项/d’文件名

删除第几行到第几行

sed ‘2,5d’文件名

删除文中所有字母

sed ‘s/[a-zA-Z]//g’文件名

删除文中所有数字

sed ‘s/[0-9]//g’文件名

删除文中的基数行

sed  '1~2d' tmp

注意:如果要直接修改文件,则加入参数-i

3、总结

本文主要整理了正则表达式与sed的基本用法,后续将继续整理awk的基本用法。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!