Linux-正则表达式

Linux 下 正则表达式 所支持的工具有哪些呢:

1 匹配文本行的grep工具族;

2 改变输入流的stream editor (sed)流编辑器;

3 用于处理字符串的语言:awk,python,perl等;

4 文件查看程序或者分页程序

5 文本编辑器诸如vi,vim,ed

精确模式的匹配不忽略大小写:

\b表示元字符,代表着单词的开头或者结尾,比如我需要查找一个文本的Nicky,如果不使用精确匹配,那么所有包含Nicky的单词,无论大小写全部会查找出来。怎么办呢?\bNicky\b

如果需要查找Nicky 后面含有coder的单词就可以这样写\bNicky\b.*\bcoder\b;

.也表示元字符,他匹配除了换行符以外的任意字符;

*也表示元字符,表示匹配任意的数量而不是字符;

+元字符,匹配至少一个

?最多一个

\d:元字符表示匹配数字,\w表示匹配字母

如果我要匹配0\d\d-\d\d\d\d\d\d\d\d

0\d{2}-\d{8}

 

如何测试或正则:

如果你当前在命令行:

cat /etc/passwd | grep sbin

----------------------------------------

\(word\)表示查找到word之后,保存在保留区域(内存中),后续的表达式可以通过转转义序列引用这些匹配的模式,第二个或者第九个可以通过\1..9的数字来表示匹配几个。举个列子:

\(Nicky\).*\1:匹配两个Nicky之间任意的字符

 

只显示以a开头的行,比如我现在通过某一个命令或者在文本中,想查找哪些行是以a开头的。

ls -l | grep '^a'

或者 grep '^a'/tmp/Pattern.txt;

 

从某一个文件或某几个文件中查找某字符串

grep 'Nicky' /tmp/Pattern.txt /tmp/spring/wser.xml

 

在文本中查找以..开头的行且匹配某表达式:

grep 'travel' a* /tmp/Pattern.txt

cat /tmp/Pattern.txt | grep '^a'

注意cat /tmp/Pattern.txt | grep travel’a*不适合于cat命令。

posix字符集中,我们还支持

[:alnum:]表示字母数字符,等价于A-Za-z0-9

[:alpha:]匹配字母

[:digit:]匹配数字

[:lower:]匹配写字母

[:upper:]匹配大写字母

 

我们还需注意:

如果在方括号中[]使用^字符,表示取反而不是以什么开头

[^abc]处理abc三个小写字母之外的任意字符

 

匹配单词的开始和结束

比如我想查找一个 以Nicky开始和结束的字串:

grep "\<Nicky\>" /tmp/Pattern.txt

比如我想查找一个 以Nicky开始字串:

I’m Nickys.

grep "\<Nicky" /tmp/Pattern.txt

猜你喜欢

转载自nicky19870612.iteye.com/blog/1999010