基础正则符
字符匹配:., [], [^]
次数匹配: *, \?, \+, \{m,n\}
锚定: ^, $, \<, \>
分组引用: \(\), \1, \2, ...
扩展正则符
次数匹配:*, ?, +, {m,n}
锚定:
分组引用:(), \1, \2, ...
或者:|
sed:行编辑工具
sed [option]... '地址 编辑命令' FILE...
地址:
行范围:
start_line[, end_line]
/patten1/,/patten2/: 第一次被pattern1匹配到的行开始,到第一次被pattern2匹配到的行结束之间的所有行;
特定行:
/pattern/
无地址:全文
pattern space: 模式空间
编辑命令:命令可在之前加!取反
p:打印
d: 删除
i \text: 行上方,text即为插入的内容
a \text: 行下方,
r /path/from/some_file:
w /path/to/some_file: 把符合条件的行保存至指定的文件中
=: 显示符合条件行的行号
s///: s@@@
g,i
选项:
-n: 静默模式,不显示模式空间中的内容
-r: 支持使用扩展正则表达式
-i: 修改原文件;
-e: sed -e "" -e "" -e "", sed "{COM1;COM2;COM3}"
1、替换/etc/inittab中的"id:3:initdefault"一行数字为5;
sed -e 's/id:3:initdefault/id:5:initdefault/'
2、删除/etc/init.d/functions的空白行;
sed /^[[:space:]]*$/d
3、删除/boot/grub/grub.conf文件中行首的空白字符;
4、echo一个路径给sed,通过sed取出其目录名;例如echo "/etc/sysconfig/" | sed,返回/etc;
echo '/etc/sysconfig/' | sed 's@[^/]\{1,\}/\?$@@'
awk:文本报告生成器
可以实现对文件中每一行内容的每个字段分别进行格式化,而后进行显示
awk, --> nawk
gnu awk --> gawk
基本语法:
awk [option]... 'script' FILE...
awk [option]... '/PATTERN/{action}' FILE...
支持使用:变量(内置变量、自定义变量)、循环、条件、数组
PATTERN:
地址范围:
start_line, end_line
/pat1/,/pat2/
特定行:
/pattern/
#
表达式:比较
>, >=, ==, <, <=, !=, ~
BEGIN模式:在{action}开始之前执行一次
END模式:在{action}结束之后执行一次;
内置变量:
NF:Number of Field
FS: Field Seperator,输入分隔符;-F:
OFS:输出时的字段分隔符
awk分隔符常用的有四种:
字段的:FS, OFS
行的:
引用变量的值,不需要以$开头,所有以$开头的变量,是用于引用字段的值;
action:
print "string"
print $#
print $1,$2,...
练习:
1、显示gid小于500的组;
gawk -F: '$3<500{print $1}' /etc/group
2、显示默认shell为nologin的用户;
gawk -F: '$7~/nologin$/{print $1}' /etc/passwd
3、显示eth0网卡配置文件的配置信息,只显示=号后的内容;
gawk -F= '{print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0
4、显示/etc/sysctl.conf文件定义的内核参数的参数名;
awk -F= '/^[^#]/{print $1}' /etc/sysctl.conf
5、显示eth0网卡的ip地址;
ifconfig eth0 | awk -F: '/inet addr/{print $2}' | awk '{print $1}'
ifconfig eth0 | awk 'BEGIN{FS="[ :]+"}/inet addr/{print $4}'