Linux 文本处理三剑客
grep:文本过滤工具(grep ; egrep ; fgrep)
grep :支持标准输入(例如:grep abc 回车后输入内容,可检测出带有abc的行)
-v :显示不被patter匹配的行
-i : 忽略大小写
-n :显示出行号
-c :统计匹配的行的数量
-q :静默模式,不输出任何信息 echo $? //可检测出是否查找到信息(0查找到)
-o :直接显示匹配到的字符串
-A :显示出包含关键字的后续几行
-B : 显示出包含关键字的前几行
-C : 显示出包含关键字的前后几行
-e :代表或的关系(例如:-e wang -e root //过滤出wang或mage 的行)
-w :匹配整个单词
-E :(egrep) 支持扩展的正则表达式
-F :(fgrep) 不支持正则表达式
正则表达式(REGEXP):(匹配的是字符串)
正则表达式引擎:采用不同算法,检查处理正则表达式的软件模块PCRE
man 7 regex //查看正则表达式的格式
元字符分类:字符匹配、匹配次数、位置锚定、分组
一.基本正则表达式(BRE)
字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意一个字符
[^] 匹配指定范围外的任意一个字符 [:print:] 可打印字符
[:upper:] 任意大写字母 [:blank:] 空白字符(空格和制表符)
[:lower:] 任意小写字母 [:space:] 水平和垂直的空白字符
[:digit:] 任意数字 [:cntrl:] 不可打印的控制字符(退格、删除、警铃)
[:alpha:] 任意大小写字母 [:puncct:] 标点符号
[:alnum:] 任意数字或字母 [:graph:] 可打印的非空白字符
grep -o [[:digit:]] /etc/centos-release |head –n1 //取出centos版本号6或7
匹配次数:
* 匹配前面的字符任意次,包括0次
.* 匹配任意长度的一个字符
\? 前面的字符重复0次或1次
\+ 前面的字符至少1次以上
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
grep -o “ [0-9]\+” /etc/centos-release |head –n1 //取出版本号
ifconfig ens32 |grep ” netmask” | grep -o “[0-9.]\{7,\}” |head -n1 //取出ip地址
ifconfig ens32 |grep ” netmask” | grep -o “[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}” |head -n1
ifconfig ens32 |grep -o “inet [0-9.]\+” |cut -d” ” -f2 //取IP地址
df | grep sda |grep -o “[0-9]\{1,3\}%”|grep -o “[0-9]\+” |sort -nr |head -n1 //分区
位置锚定:
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词首锚定,用于单词模式的右侧
\
grep -v ^[[:space:]]*$ f1 //过滤文件的空白行
分组:
\(\) 将一个或多个字符捆绑在一起,当做一个整体进行处理
\1 表示从左侧起第一个括号以及与之匹配右括号之间的模式所匹配到的字符
反向引用:引用前面分组括号中的模式所匹配字符,并非模式本身
\| 或 (例如: a\|b ; (C\|c)at))
grep “^\(.*\):.*/\1$” /etc/passwd //取出前后单词一样的行
二.扩展正则表达式(ERE):
次数匹配:
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{m} 匹配m次
{m,n}: 至少m,至多n次
位置锚定:
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词首锚定,用于单词模式的右侧
分组:
()将一个或多个字符捆绑在一起,当做一个整体进行处理
后向引用: \1 , \2
或 者: (例如: a|b ; (C|c)at))
echo /etc/rc.d/init.d/functions |egrep -o “[^/]*/?$” //取基名
[0-9] 0-9
[1-9][0-9] 10-99
1[0-9][0-9] 100-199
2[0-4][0-9] 200-249
25[0-5] 250-255