linux下的shell命令学习笔记007

# ----------------------------------------

# grep,egrep

# 这个是我自己写的最适合我的mian.c文件的函数查找方法

# 为什么有时候:()|?等符号的时候必须用使用\转义?

# 我用Ubuntu测试,需要转义,例子如下

grep '^\(static \)\?\(\(void\|int\|char\) \)\?[a-zA-Z_][a-zA-Z_0-9]*(.*)'

 

# 经过实践,写了如下脚本用来测试:(明白了)

 

#! /bin/bash

echo "---------------start------------------"

# 标准的grep,使用时需要注意括号,问号,或符号等默认是原始含义

# 若要使用他们的正则表达式中的含义,需要转义

grep -n --color=auto '\(static \)\?\(\(void\|int\|char\) \)[a-zA-Z_][a-zA-Z_0-9]*(\(.*\))'

echo "----------------1---------------------"

# 标准的grep,-E 表示使用扩展的正则表达式

grep -E -n --color=auto '(static )?((void|int|char) )[a-zA-Z_][a-zA-Z_0-9]*(\(.*\))'

echo "----------------2---------------------"

# egrep:扩展型正则表达式

# 可以直接使用:例如:

# | 表示"或"

# ? i表示0个或者1个

# ...

egrep -n --color=auto '(static )?((void|int|char) )[a-zA-Z_][a-zA-Z_0-9]*(\(.*\))'

echo "---------------end--------------------"

 

 

# -------------------------------------

# grep相关参数:

#-E见上

#-n见上

#-A[number] 显示关键字所在行的同时也把它的后number行都显示

#-v反向选择

#-i不区分大小写

 

 

# --------------------------------------

# 正则表达式 (基础的)

# ^word行首 word$行尾 ----- 若找空行 '^$'

# .代表此处必定存在1个任意的字符

# * 代表0到无穷多个的前一个字符

# [list] 从字符集的RE字符中找到想要选出的字符,仅选其中之一

# [n1-n2]到n2的连续字符的集合,这是个可以选取的范围

# [^list]从字符集的RE字符中找到不要的字符串或范围,类似反向操作

# \{n,m\} 连续n个到m个前一个RE字符

# \{n\}连续n个前一个RE字符

# \{n,\}连续n个以上的前一个RE字符

 

# --------------------------------------

# grep 应用

# 1. ls -l | grep '^d'

# 2. ls -a | grep '^\.'

 

# --------------------------------------

# 扩展的正则表达式

# grep -E 或者 egrep

# +重复1个或1个以上的前一个RE字符

# ? 重复0个或1个前一个RE字符

# | "或"操作

# () 组,例如'b(oo|ea)t'

# ()+ 多个重复组的判别,例如:cat 1.txt | grep -E '^(ha|Ha)+'

#