UNIX shell学习(1)-grep与正则表达式

在vi模式下,将tom和Tom替换成David,可以使用如下命令:

:1,$s/tom/David/g   

 

 

:1,$s//<[Tt]om/>/David/g

含义:从文件第一行到文件末尾(1,$),用David替换单词tom和Tom.

g:表示全程执行该操作(即替换掉同一行中出现的所有指定模式).

正则表达式元字符/<和/>代表单词的开始和结束。

 

 

正则表达式元字符: 

元字符

功能

示例

匹配对象

^

行首定位符

/^love/

匹配所有以love开头的行

$

行尾定位符

/love$/

匹配所有以love结尾的行

.

匹配单个字符

/l..e/

匹配包含一个l,后跟两个字符,再跟一个e的行

*

匹配0或多个重复的位于星号前的字符

/ *love/

匹配包含跟在零个或多个空格后的模式love的行

[]

匹配一组字符中的任一个

/[Ll]ove/

匹配包含loveLove的行

[x-y]

匹配指定范围内的一个字符

/[A-Z]ove/

匹配后面跟着ove的一个AZ之间的字符

[^ ]

匹配不在指定组内的字符

/[^A-Z]/

匹配不在范围AZ之间的任意一个字符

/

用来转义元字符

/love/./

匹配包含love,后面跟一个句号。(未经转义的)句点通常匹配单个任意字符

 

许多使用RE元字符的UNIX/Linux程序都支持下面附加的元字符

/<

词首定位符

//<love/

匹配包含以love开头的词的行(vigrep支持)

/>

词尾定位符

/love/>/

匹配包含以love结尾的词的行(vigrep支持)

/(../)

匹配稍后将要使用的字符的标签

//(love/)able/1er/

最多可以使用9个标签,模式中最左边的标签是第一个。例如,模式love被保存为标签1,用/1 表示。左边这个例子中,查找串是一个lovable后跟lover的长串(sedvihe grep支持)

x/{m/}

x/{m,/}

x/{m,n/}

字符x的重复出现:

M次、至少m、至少m次且不超过n

o/{5,10/}

匹配包含5~10个连续的字母o的行(vigrep支持)

 

GNU版本grep的正则表达式元字符基本集补充: 

/w

所有字母与数字,成为字符[a-zA-Z0-9_]

l/w*e

匹配一个l后跟零个或多个字符,最后接一个e

/W

所有字母与数字之外的字符,成为非字符[^a-zA-Z0-9_]

love/W+

匹配love后跟一个或多个非字符(.,?)

/b

词边界

/blove/b

仅匹配love这个单词

 

egrep与grep -E使用的扩展集 

+

匹配一个或多个前导字符

[a-z]+ove

匹配一个或多个小写字母,后跟ove。如move,approve,love,behoove

?

匹配零个或一个前导字符

lo?ve

匹配一个l后跟一个或零个字母o的模式,如lovelve

a|b|c

匹配abc

love|hate

匹配其中的一个表达式,lovehate

()

组字符

love(able|rs)

(ov)+

匹配loveablelovers

匹配一个或多个连续的ov

(..)(…) /1/2

标签匹配字符

/(love)ing

寄存器中以标签标记的部分,以数字1记录。将来引用时,用/1重复该模式。最多可以使用9个标签,模式最左侧部分为第一个标签。例如,模式love保存在寄存器1中,将来以/1进行引用

 

括号字符类:

括号类

含义

[:alnum:]

字母与数字两种字符

[:alpha:]

字母字符

[:cntrl:]

控制字符

[:digit:]

数字字符

[:graph:]

非空字符(不包含空格、控制字符等)

[:lower:]

小写字母

[:print:]

[:graph:]类似,但包含空格字符

[:punct:]

标点字符

[:space:]

所有的空白字符(换行符,空格符,制表符)

[:upper:]

大写字母

[:xdigit:]

十六进制数字字符(0-9a-fA-F)

 

例:grep '[[:space:]]/.[[:digit:]][[:space:]]' filename

查找filename中包含一个空格字符、一个数字字符和另一个空格字符的行。

 

所有变体(-G,-E和-F)均可用的GNU grep选项 

选项

作用

-#-

将匹配行前后#行的内容一同打印出来;也就是说,grep -2 pattern filename将导致grep打印匹配行及匹配行的前两行和后两行

-A #, --after-context=#

打印匹配行后面#行的内容;也就是说,匹配行及它后面指定的#行内容

-B #, --before-context=#

打印匹配行前面#行的内容;也就是说,匹配行及它前面指定的#行内容

-C #, --context=#

等价于-2选项。打印匹配行的前两行和后两行

-V, --version

打印grep版本信息,版本信息应当包含在所有的bug报告中

-a, --text, --binary-files=text

将二进制文件当做文本文件处理

-b, --byte-offset

在输出的每行前显示偏移字节数

-c, --count

为每个输入文件打印成功匹配的行数。-v则打印一些未匹配的行数

-D action, --devices=action

如果输入文件为一个设备,如套接字或管道。则action默认从该设备读,就如同读一个普通文件一样。如果actionskip,则该设备被忽略

-e PATTERN, --regexp=PATTERN

使用字面PATTERN作为模式;这对保护以-开头的模式非常有帮助

-f FILE, --file=FILE

FILE中获得模式,每行一个。空文件包含0个模式,因此什么也不能匹配

--help--

显示有关grep命令行选项及错误报告地址的帮助信息,然后退出

-h, --no-filename

当搜索多个文件时,禁止输出文件名前缀

-I, --ignore-case

忽略模式和输入文件的大小写区别

-L, --files-without-match

仅打印所有未能匹配模式的文件名

-l, --files-with-matches

仅打印所有正确匹配模式的文件名

-m #, --max-count=#

如果文件是标准输入或正规文件,在找到指定数量(#)的匹配行后停止读文件

-n, --line-number

在匹配成功的输出行前加上行号作为前缀

-q, --quiet

禁止正规输出。可用来替代-n

-r, -R, --recursive, --directories=recurse

对列出的目录,递归的读并处理这些目录中的所有文件;也就是指该目录下的所有目录

-s, --silent

禁止显示文件不存在或文件不可读的错误信息

-v, --revert-match

转换匹配性质,选择非匹配行

-w, --word-regexp

仅选择包含词匹配的行。匹配词边界上包含字母、数字和下划线的字符串

-x, --line-regexp

仅选择精确匹配整行的那些匹配

-y

与已废除的-i同义

-U, --binary

将文件作为二进制文件处理。仅有MS-DOSMS-Windows支持该选项

-u, --unix-byte-offsets

报告UNIX风格的字节偏移。这个选项仅在同时使用-b选项的情况下才有效;仅有MS-DOSMS-Windows支持该选项

-Z, --null

在文件名的末尾放上ASCII空字符以取代换行符

   

vi模式下,括在正斜杠之间的正则表达式是查找串,用来跟文本文件中的每一行进行匹配:

a. /^[A-Z]..$/  查找文本中所有以大写字母开头、后跟两个任意字符,再跟一个换行符的行。

b. /^[A-Z][a-z ]*3[0-5]/  查找所有以大写字母开头、后跟零个或多个小写字母或空格,再跟数字3和一个0~5之间的数字的行。

c. /[a-z]*/./  查找包含跟在零个或多个小写字母后的句点的行。

d. /^ *[A-Z][a-z][a-z]$/  查找以零个或多个空格开头(注意:制表符不算空格),后跟一个大写字母、两个小写字母和一个换行符的行。

e. /^[A-Za-z]*[^,][A-Za-z]*$/  查找以零个或多个大/小写字母开头,后跟一个非逗号的字符,再跟零个或多个大/小写字母和一个换行符的行。

 

含义:从文件第一行到文件末尾(1,$),用David替换单词tom.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值