grep - juedaiyuer/researchNote GitHub Wiki
#grep#
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作
#命令格式
grep [option] pattern file
##选项与参数##
-a 将 binary 文件以 text 文件的方式搜寻数据
-c 计算找到 '搜寻字符串' 的次数
-i 忽略大小写的不同,所以大小写视为相同
-l 忽略大小写
-n 顺便输出行号
-v 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto 可以将找到的关键词部分加上颜色的显示喔!
-f 规则文件 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式
在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。 这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=auto 又显的很麻烦~ 此时那个好用的 alias 就得来处理一下啦!你可以在 ~/.bashrc 内加上这行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』来立即生效即可喔! 这样每次运行 grep 他都会自动帮你加上颜色显示啦
##pattern正则表达式主要参数##
\ 忽略正则表达式中特殊字符的原有含义。
^ 行首匹配
$ 行尾匹配
\< 从匹配正则表达式的行开始。
\> 到匹配正则表达式的行结束。
[] 单个字符,如[A]即A符合要求 。
[ - ] 范围,如[A-Z],即A、B、C一直到Z都符合要求 。
. 一定有一个任意字节
* 有字符,长度可以为0
.* 一起用代表任意字符
{} 限定范围的字符,因为{与}的符号在shell有特殊意义,需要'\{'与'\}'
\(..\) 标记匹配字符,如'\(love\)',love被标记为1
x\{m\} 重复字符x,m次
x\{m,\} 重复字符x至少m次
x\{m,n\} 重复字符x,在区间[m,n]
\w 匹配文字和数字字符,也就是[A-Za-z0-9],如'G\w*p'匹配G开头中间为零个或多个文字或数字字符,结尾是p
\W 匹配一个或多个非单词字符
\b 单词锁定符 如\bgrep\b 只匹配grep
##POSI X字符##
为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类
[:alnum:] #文字数字字符
[:alpha:] #文字字符
[:digit:] #数字字符
[:graph:] #非空字符(非空格、控制字符)
[:lower:] #小写字符
[:cntrl:] #控制字符
[:print:] #非空字符(包括空格)
[:punct:] #标点符号
[:space:] #所有空白字符(新行,空格,制表符)
[:upper:] #大写字符
[:xdigit:] #十六进制数字(0-9,a-f,A-F)
##grep与正则表达式##
###字符类###
#搜寻test或taste两个单字
grep -n 't[ae]st' file
#字符串的反向选择[^]
#搜索到有oo的行,但不想要oo的前面有g
grep -n '[^g]oo' file
#oo前面不想要有小写字节,[^a-z]
grep -n '[^a-z]oo' file
#行首字符
#打印出the开头的行
grep -n '^the' file
#匹配小写字母开头
grep -n '^[a-z]' file
#匹配开头为非英文
grep -n '^[a-zA-Z]' file
#匹配行尾为小数点.
grep -n '\.$' file
#找出空白行
grep -n '^$' file
#找出g??d的字串,即共有四个字节
grep -n 'g..d' file
#想要列出字母重复的情况,oo,ooo,oooo...
# o* 拥有空子节或一个o以上的字节
# ooo* 至少拥有两个以上字节
#想要字串开头与结尾都是g,两者之间至少一个o
grep -n 'goo*g' file
#想要找出g开头与g结尾的行,当中的字符可有可无
grep -n 'g.*g' file
#想要找出任意数字的行
grep -n '[0-9][0-9]*' file
#想要找出两个o的字串
grep -n 'o\{2\}' file
#想要找出g后面接2到5个o,然后再接一个g的字串
grep -n 'go\{2,5\}g' file
#想要2个o以上的字串
grep -n 'go\{2,\}g' file
##扩展grep##
grep -E
##source##