1、grep: Global search REgular expression and Print out tht line
文本搜索工具,根据用户指定的模式对目标文本进行逐行匹配检查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
选项:
- –color=auto 对匹配到的文本着色显示
- -v 显示没有被匹配到的行
- -i 忽略大小写匹配
- -n 显示匹配到的行号
- -c 统计匹配到的行总数
- -o 仅显示匹配到的字符串
- -q 静默模式,不输出任何信息
- -A #: 同时显示匹配行后的#行
- -B #: 同时显示匹配行前的#行
- -C #: 同时显示匹配行前后的#行
- -e 实现多选项之间的逻辑或关系(grep -e ‘cat’ -e ‘dog’ file)
- -w 匹配整个单词 -E egrep -F fgrep
2、正则表达式
规则查看: man 7 regex
元字符分类:字符匹配、匹配次数、位置、分组
字符匹配:
- . 匹配任意单个字符
- [] 匹配指定范围内的任意单个字符 [^] 匹配指定范围外的任意单个字符
- [:lower:] 小写字母
- [:upper:]
- [:alpha:]
- [:digit:] 十进制数字
- [:alnum:] 字母和数字
- [:xdigit:] 十六进制数字
- [:blank:] 空白字符(空格和制表符)
- [:space:] 水平和垂直的空白字符
- [:cntrl:] 不可打印的控制字符
- [:graph:] 可打印的非空白字符
- [:print:] 可打印字符
- [:punct:] 标点符号
匹配次数:
- * 匹配前面的字符任意次,贪婪模式:尽可能长的匹配 (.* 匹配任意长度的任何字符)
- \? 匹配前面的字符0或1次
- \+ 匹配前面的字符至少一次
- \{n\} 匹配前面的字符n次 \{n,m\} 匹配前面的字符n-m次 \{,m\} \{n,\}
位置锚定:定位字符出现的位置
- ^ 行首;$ 行尾 (^$ 空白行; ^pattern$ 模式匹配整行 ;^[[:space:]]$ 空白行)
- \<或者\b 词首锚定,用于单词模式的左侧
- \<或者\b 词尾锚定,用于单词模式的右侧;单词边界:除了字母、数字、下划线_ (\<pattern\> 匹配整个单词)
分组: \(pattern\),将括号中的模式当作一组进行处理。分组括号中的模式匹配到的内容会被正则表式引擎记录于内部的变量中,这些变量的命名方式为:\1 \2 \3 。\1 表示从左侧起第一个左括号以及与之匹配的右括号之间的内容
后向引用:引用前面分组括号中模式匹配到的内容,并非模式本身
逻辑: \| 或
示例: 用到正则表达式的匹配模式需要用引号引起来
1、获得本机的ip地址
- ifconfig eth0|grep “inet addr”|egrep -o “([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}”|head -1
- ifconfig eth0|grep “inet addr”|egrep -o “.*Bcast:”|egrep -o “\b[[:digit:]\.]*\b”
- 更准确的取法: ifconfig eth0|grep “inet addr”|egrep -o “(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])”
2、查找centos6中的系统用户,输出起用户名和uid
- cut -d: -f1,3 /etc/passwd|grep -E “(\b[0-9]|[1-9][0-9]|[1-4][0-9][0-9])$”
3、查找centos系统的主版本号:
- grep -o ” [0-9]” /etc/centos-release|tr -d ” “
4、找出//etc/passwd中用户名和shell同名的行
- grep ‘^\([^:]*\)\b.*\/\1$’ /etc/passwd
5、取路径的基名
- echo “/etc/rc.d/init.d/” |egrep -o “[^/]*/?$”|tr -d “/”
6、取路径名
- echo “/etc/rc.d/init.d/” |egrep -o “.*[^/]+”|egrep -o “.*/”|egrep -o “.*[^/]+”
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/86694