码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2015-04-02 20:45:58      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

正则表达式

正则表达式

基本符号

在 [] 里面, .* 等符号均表示字符不表示其他
在 [] 里面, ^ 会被解释为非, 但是在外面就会被解释为 开头的意思
在 [] 里面, 只有 ^ 和 - 才有特殊意义
* : 0 或无穷. 例如 grep a* 会把所有的数据都输出出来, 有没有都可以
. : 任意一个字符
.*: 任意
[[:alnum:] ]: 字母和数组
[[:alpha:] ]: 字母
[[:blank:] ]: 空格和 tab
[[:cntrl:] ]: 控制键
[[:digit:] ]: 数字
[[:graph:] ]: 除了空格和 tab 之外
[[:lower:] ]: 小写
[[:upper:] ]: 大写
[[:print:] ]: 能打印出来的字符
[[:punct:] ]: 标点符号
[[:space:] ]: 空格, [[Tab] ], CR 等等
[[:xdigit:] ]: 16 进制 0-9, A-F, a-f
[^[:xdigit:]]: 表示非 16 进制数
^[^[:xdigit:]]: 表示开头是非 16 进制数
\s: 空白字符
\S: 非空白字符
\w: [a-zA-Z0-9]
\W: [^a-zA-Z0-9]
\d: 数字, [[:digit:] ] [0-9]
\D: 除数字之外, [^0-9]

定位

句首: ^  \A
句末: $ \Z \z
s$: 匹配以 s 结尾的行
空白行: ^$
单词前: \<
单词后: \>
单词前后:\b    echo "hello world" | grep "\bhello\b"
非单词前后:\B  echo "ahelloworld" | grep "\Bhello\B"

匹配到的次数

要表示查找一个字符 2 到 5 次, 可以用 grep ‘a\{2,5\}‘ FILE
如果没有加\, 那么会出错.

pattern\{n\}     # 匹配 n 次
pattern\{n,\}    # 匹配至少 n 次
pattern\{n,m\}   # 匹配 n 次到 m 次之间的次数

延伸的正则表达式

  1. 普通的正则表达式
    grep -v ‘^$‘ FILE | grep -v ‘^#‘
    除去行首为#的行列.
    
  2. 延伸的正则表达式
    egrep -v ‘^$|^#‘ FILE
    其中 egrep 可以是 grep -E ‘|‘ 表示或者的意思
    

+ 重复一个或者无穷个

寻找 god good goood…

grep  ‘goo*d‘ FILE    # * 表示前面的 0 个或者无穷多
egrep ‘go+d‘ FILE     # + 表示前面的 1 个或者无穷多

? 0 个或 1

寻找 god good 这 2 个字符串.

egrep -n ‘goo?d‘
  • 和 ? 的集合就是 go*d,

| 或者的意思

egrep -n ‘god | good‘ FILE
egrep -n ‘god | good | goood‘ FILE

() 群组

寻找 glad good

egrep ‘g(la | oo)d‘ FILE       # 括号里面的空格仍然表示空格

()+ 多个重复群组的判别

echo ‘AxyxyxyxyxyxyxyC‘ | egrep ‘A(xy)+C‘

perl 环视

不了解.

perl 非捕获型括号(?:…)

(1|one)(?:and|or)(2|two)

$1 就会等于 1 或者 one
$2 就会 跳过 (and|or) 直接等于 2 或者 two

perl 命名捕获(?<NAME>)

(?<Area>\d\d\d)-(?<Exch>\d\d\d)-(?<Num>\d\d\d)

grep

-A 后面可加数字,为 after
-B 后面可加数字,为 befer
–color=auto 颜色
–color=never 颜色
-a binary 文件以 text 文件的方式搜索
-c 计数
-i 忽略大小写
-n 输出行号
-l 输出匹配到的文件
-L 输出没有匹配到的文件
-v 输出不含有 STRING
-o match only
## grep 的另一个用法
if [ -n "$(echo $1 | grep ‘^-[0-9][0-9]*$‘)" ]; then
    echo $1
else
    echo "Usage: sh FILENAME -NUMBER"
fi

# 保存到 test.sh
# 输入 sh test.sh -9999   # 输出  9999
# 输入 sh test.sh 999     # 输出  Usage: sh FILENAME -NUMBER
# 输入 sh test.sh -99ab   # 输出  Usage: sh FILENAME -NUMBER

## grep 和 shift 的组合
while [ -n "$(echo $1 | grep ‘^-‘)" ]; do
    case $1 in
        "-a") echo "-a"; ;;
        "-b") echo "-b"; ;;
        "-c") echo "-c"; ;;
           *) echo "Uage: sh FILENAME [-a] [-b] [-c]"; ;;
    esac
    shift
done
# 保存到 test.sh
# 输入 sh test.sh -a -b -c    # 输出 -a -b -c

使用 grep 捕捉 ldd 的输出

ldd /bin/bash | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"

正则表达式

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4387968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!