您的位置:首页 > 其它

正则表达式详解

2016-06-06 22:47 483 查看
正则表达式是一种符号表示法,被用来识别文本中的模式。

grep

grep [options] regex [file…]

grep选项列表



例子

ls /bin > dirlist-bin.txt
ls /usr/bin > dirlist-usr-bin.txt
ls /sbin > dirlist-sbin.txt
ls /usr/sbin > dirlist-usr-sbin.txt
ls dirlist*.txt
dirlist-bin.txt     dirlist-sbin.txt    dirlist-usr-sbin.txt
dirlist-usr-bin.txt

在所有列出的文件中搜索字符串 bzip
grep bzip dirlist*.txt
dirlist-bin.txt:bzip2
dirlist-bin.txt:bzip2recover

-l 选项列出包含匹配模式的文件
grep -l bzip dirlist*.txt
dirlist-bin.txt

-L选项列出包含匹配模式的文件
grep -L bzip dirlist*.txt
dirlist-sbin.txt
dirlist-usr-bin.txt
dirlist-usr-sbin.txt


元字符和文本

原义字符:匹配本身 (例如bzip)

元字符:^ $ . [ ] { } - ? * + ( ) | \

所有非元字符都被认为是原义字符

. 被用来匹配单个任意字符
^和$ 被看作锚点,分别表示开头和结尾
[] 指定的字符集合中匹配一个单个的字符
[]中的第一个字符是^ 表示不匹配字符集合中的字符
[A-Za-z0-9] [A-Z] [a-z] [0-9] 表示字符区域
+  匹配1个或多个
*  匹配0个或多个
?  匹配0个或1个
{} 匹配特定个数的元素 如:{m,n} 表示m至n个
|  则是或意思.如:ps(a|b),则匹配psa或者psb
\ 是转义字符


POSIX 字符集

先看两个例子(查找以大写字母开头的文件)

ls /usr/sbin/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*
/usr/sbin/MAKEFLOPPIES
/usr/sbin/NetworkManagerDispatcher
/usr/sbin/NetworkManager

ls /usr/sbin/[A-Z]*
/usr/sbin/biosdecode
/usr/sbin/chat
/usr/sbin/chgpasswd
/usr/sbin/chpasswd
/usr/sbin/chroot
/usr/sbin/cleanup-info
/usr/sbin/complain
/usr/sbin/console-kit-daemon


明显可以看出第二例子有问题,它含有以小写字母开头的文件!

 

原因在于ASCII中字母的排列规则是

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz


而为了满足不在 U.S.英语范围内的字符,扩充了ASCII,使用了添加了字符(128-255)。POSIX 中的 locale ,可以选择所需的字符集,echo $LANG 查看当前字符集一般为en_US.UTF-8。它使用字典排列顺序而不是 ASCII 顺序。

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ


export LANG=POSIX可以使系统为它的字符集使用 U.S.英语,即ASCII

POSIX 字符集

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: