正则表达式(Regular Expression,):
元字符:
. 任意单个字符
表示字符个数的元字符:
* 匹配其前面的字符任意次
如:a*b 则b,ab aab aaab都可以 但acb不可以
.* 任意长度的任意字符
\? 匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,至多n次
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
^$:空白行
\<或\b:锚定词首,其后面的任意字符必须作为单词的首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词的尾部出现
分组:
\(\)
\(ab\)*
匹配ip地址
ifconfig | egrep --color '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
grep 文本过滤器
grep语法
grep 'pattern' input_file ...
grep:根据模式搜索文本,并将符合模式的文本行显示出来。
grep 【option】 pattern 【file】
option:
-i 忽略匹配字符的大小写
--color 将匹配的字符以高亮颜色标记出来
-v 显示没有被匹配的行
-E 使用扩展正则表达式
grep -A 2 ‘cord id’ /proc/cpuinfo
-C 前后行也会显示
grep -E = egrep
sed 流编辑器
sed语法
sed :模式空间
默认不编辑原文件,仅对模式空间中的数据做处理,而后,处理结束后,将模式空间打印出来
用法:
sed [option] 'AddressCommand' file ...
option:
-n 静默模式,不显示默认空间的行
-i 直接修改原文件
-e SCRIPF -e SCRIPT 可以
Address:
1.StartLine,Endline
比如:1,100
$:最后一行
2./RegExp/
/^root/
3./pattern1/,/pattern2/
第一次被pattern1匹配的行开始,至第二次被pattern2匹配到的行.结束
4.LineNumber
指定的行
5.StartLine,+N
从startLine开始,向后的N行
Command:
d:删除符合条件的行;
p:显示符合条件的行
a\string :在指定的行后面追加新行,内容为string
\n 可以用于换行
i\string 在指定的行前面
r FILE 将指定的文件的内容添加至符合条件的行处
w FILE 将地址指定范围内的行另存至指定的文件中
s/pattern/string/ 修饰符:查找并替换,默认只替换每行中第一次被模式匹配到的字符串
加修饰符
g: 全局替换
i: 忽略字符大小写
s///: s###, s@@@
\(\), \1, \2
例如:
l..e: like-->liker
love-->lover
like-->Like
love-->Love
&: 引用模式匹配整个串
awk:报告生成器,格式化以后显示
AWK a.k.a. Aho, Kernighan and Weinberger
版本:
1、new awk: nawk
2、gawk, awk
语法:
# awk [options] 'script' file1 file2, ...
# awk [options] 'PATTERN { action }' file1 file2, ...
awk的输出:
一、print
print的使用格式:
print item1, item2, ...
要点:
1、各项目之间使用逗号隔开,而输出时则以空白字符分隔;
2、输出的item可以为字符串或数值、当前记录的字段(如$1)、变量或awk的表达式;数值会先转换为字符串,而后再输出;
3、print命令后面的item可以省略,此时其功能相当于print $0, 因此,如果想输出空白行,则需要使用print "";
例子:
# awk 'BEGIN { print "line one\nline two\nline three" }'
awk -F: '{ print $1, $3 }' /etc/passwd
二、awk变量
2.1 awk内置变量之记录变量:
FS: field separator,读取文件本时,所使用字段分隔符;
RS: Record separator,输入文本信息所使用的换行符&#x