linux下的shell命令学习笔记007
# ----------------------------------------
# grep,egrep
# 这个是我自己写的最适合我的mian.c文件的函数查找方法
# 为什么有时候:()|?等符号的时候必须用使用\转义?
# 我用Ubuntu测试,需要转义,例子如下
grep '^\(static \)\?\(\(void\|int\|char\) \)\?[a-zA-Z_][a-zA-Z_0-9]*(.*)' main.c
# 经过实践,写了如下脚本用来测试:(明白了)
#! /bin/bash
echo "---------------start------------------"
# 标准的grep,使用时需要注意括号,问号,或符号等默认是原始含义
# 若要使用他们的正则表达式中的含义,需要转义
grep -n --color=auto '\(static \)\?\(\(void\|int\|char\) \)[a-zA-Z_][a-zA-Z_0-9]*(\(.*\))' main.c
echo "----------------1---------------------"
# 标准的grep,-E 表示使用扩展的正则表达式
grep -E -n --color=auto '(static )?((void|int|char) )[a-zA-Z_][a-zA-Z_0-9]*(\(.*\))' main.c
echo "----------------2---------------------"
# egrep:扩展型正则表达式
# 可以直接使用:例如:
# | 表示"或"
# ? i表示0个或者1个
# ...
egrep -n --color=auto '(static )?((void|int|char) )[a-zA-Z_][a-zA-Z_0-9]*(\(.*\))' main.c
echo "---------------end--------------------"
# -------------------------------------
# grep相关参数:
#-E 见上
#-n 见上
#-A[number] 显示关键字所在行的同时也把它的后number行都显示
#-v 反向选择
#-i 不区分大小写
# --------------------------------------
# 正则表达式 (基础的)
# ^word行首 word$行尾 ----- 若找空行 '^$'
# .代表此处必定存在1个任意的字符
# * 代表0到无穷多个的前一个字符
# [list] 从字符集的RE字符中找到想要选出的字符,仅选其中之一
# [n1-n2] n1到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)+'
#