加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式与sed工具

发布时间:2020-12-14 04:34:39 所属栏目:百科 来源:网络整理
导读:1、正则表达式 通俗来讲,正则表达式是一种字符串的匹配方式,比如使用星号“ * ”来匹配任意的字符等。正则表达式实际上是一个匹配模板,当 bash 执行这个正则表达式时,就会将所有的输入数据与匹配模板匹配,匹配不成功的数据将会被过滤掉。 表 1. 常用的

1、正则表达式

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

1.常用的元字符

字符

含义

举例

.

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

bhib.*bLucyb

w

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

bhew

s

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

b

匹配单词的开始或结束

bhib

^

匹配字符串的开始

^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)/hei2hello/' 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的基本用法。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读