shell脚本(四)
(7)tr命令
#实现字符转换功能
#-c string:反选string字符集,即除了该字符串的所有字符集
#-d string:删除string中出现的所有字符
#-s:删除所有重复出现的字符序列,只保留一个
#删除所有数字
tr -d "[[:digit:]]" < name.txt
tr -d 0-9 < name.txt
#所有小写字母转换成大写字母
tr "[a-z]" "[A-Z]" < name.txt
tr "[[:lower:]]" "[[:upper:]]" < name.txt
#-c用法,将所有非26个字母替换成换行符,并且重复出现的换行符压缩成1个换行符
tr -cs "[a-z][A-Z]" "[\n]" < name.txt
#支持使用字符*数字模式,如n*4代表n出现4次
#-s是将连续重复出现的字母、数字压缩成1个
tr -s "[a-z][A-Z],[[:digit:]]" < num.txt
#结果同1行的test,t和t并不算是重复的
3、正则表达式
(1)匹配符:"*"、"^"、"."、"$"等
"*":0个或多个在*字符之前的那个普通字符
".":匹配任意字符
"^":匹配行首,放在[]字符集里面表示取反
"$":匹配行末
"[]":匹配字符集
"\":转义符,屏蔽一个元字符的特殊意义
"\<\>":精确匹配符号
"\{n\}":匹配前面字符出现n次
"\{n,\}":匹配前面字符至少出现n次
"\{n,m\}":匹配前面字符出现n-m次
(2)扩展:"?"、"+"、"()"、"|"
"?":匹配0个或1个在?字符之前的那个普通字符
"+":匹配1个或多个在+字符之前的那个普通字符
"()":表示一个字符集
"|":表示"或",匹配一组可选的字符
(3)grep命令
#支持正则表达式的多用途文本搜索工具
#-c:只输出匹配行的数量;-i:搜索时忽略大小写;-h:查询多文件时不显示文件名;
#-l:只列出符合匹配的文件名,而不列出具体的匹配行;-n:列出匹配及行号;
#-s:不显示不存在或无匹配文件的错误信息;-v:显示不包含匹配文本的所有行;
#-w:匹配事词;-x:匹配事行;-r:递归查询,搜索子目录;-q:禁止输出任何结果,以退出
#状态来表示搜索是否成功;-b:打印匹配行距文件头的偏移量,以字节为单位;
#-o:与-b结合使用,打印匹配词距文件头的偏移量,以字节为单位;-E:使用扩展表达式
#-F:不使用正则表达式,以字符串的字面意思进行搜索
#需要特别注意的是,所说的出现次数是指连续出现,而不是总共出现的次数!!!
#"*"用法,字母m出现至少出现0次
grep "nam*3" name.txt
#"."用法,搜索"na任意字符3"
grep "na.3" name.txt
#搜索以A开头的行,并输出行号
grep -n ^A a.txt
#"$"用法,搜索以10结尾的行
grep 10$ name.txt
#"[]"用法,搜索一个任意小写字母后跟一个任意数字的行
grep [a-z][0-9] name.txt
#"\"用法,搜索以*号开头的行
grep ^\* name.txt
#"\<\>"用法,搜索出现name3的行
grep "\<name3\>" bkname.txt
#"\<n,\>"用法,搜索数字0至少出现5次
grep "0\{5,}" bkname.txt
#"\<n,m\>"用法,搜索数字7出现2次到3次的行
grep "7\{2,3\}" name.txt
#"?"、"+"、"()"和"|"属于正则表达式扩展,需要使用-E参数
#"?"用法,搜索包含nu或者num的行
grep -E "num?" bkname.txt
#"+"用法,搜索字母t出现至少1次的行
grep -E "t+" bkname.txt
#"()"和"|"用法结合,搜索包含nu或者num的行
grep -E "(nu|num)" bkname.txt
#多文件搜索包含name1的行,并输出行号
grep name1 name.txt num.txt
#显示匹配行前后2行
grep -2 name2 name.txt
#显示匹配行的
grep -A2 name2 name.txt
#-c:用法,统计空白行数量
grep -c ^$ /etc/httpd/conf/httpd.conf/
#-i:忽略大小写
grep -i name bkname.txt
#-h:多文件查询不显示文件名
grep -h test bkname.txt num.txt
#-n:显示匹配行和行号
grep -n test bkname.txt
#-w:查找的字符串必需为完整的单词;
#-x:显示完全符合要求的行,而且所搜索的字符串必需是单独一行
grep -w test bkname.txt
grep -x test bkname.txt