shell: 任督二脉之Shell中的正则表达式
June 4, 2015
VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进。
Shell的基础学习之前已经总结了一篇博客: http://www.cnblogs.com/jyzhao/p/4485553.html
本文将总结Shell中的正则表达式及常用的字符处理命令,为打通任督二脉奠定基础^_^。
- 基础正则表达式举例说明
-
字符截取命令
- cut命令
- awk命令
- sed命令
-
字符处理命令
- sort命令
- wc命令
Table of Contents
1. 基础正则表达式举例说明
例1:简易判断日期格式
比如:2015-05-11,只是简单判断数字的格式。
^[0-9]{4}-[0-9]{2}-[0-9]{2}$
例2:简易判断IP地址格式
比如:192.168.1.100,只是简单判断数字的格式。
[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
例3:找出1.txt文本文件中以字母开头的以及不是以字母开头的行。
以字母开头的行:
grep –color=auto “^[a-z,A-Z]>” 1.txt
不是以字母开头的行:
grep –color=auto “^[^a-z,A-Z]>” 1.txt
2. 字符截取命令
cut命令
用途:对于分隔符规范的文本进行特定截取某些列,特点是简单易用。
例4:cut截取出用户名以及对应的uid,gid,过滤掉包含’/sbin’的行。
grep -v “/sbin>” /etc/passwd | cut -f 1,3,4 -d “:>”
截取结果示例:
root:0:0
oracle:500:500
grid:501:500
awk命令
用途:对于分隔符不规范的文本进行截取,特点是功能强大,语法比cut命令复杂。
awk '条件类型1{动作1}条件类型2{动作2} ...' filename
-
awk的内置变量:
NF 每一行($0)拥有的字段总数 NR 目前awk所处理的是“第几行”数据 FS 目前的分隔字符,默认是空格键
-
awk的逻辑运算符:
>, <, >=, <=, ==, !=
例5:查询pmon进程的PID。
ps -ef | grep pmon | grep -v grep | awk ‘{print $2}’
例6:打印出/etc/passwd中uid<3的用户和他们的uid。
cat /etc/passwd | awk ‘BEGIN{FS=”:>”} $3 < 3 {print $1 “t>” $3}’
注:注意BEGIN在这里的用途,没有BEGIN第一行显示会不正确。
例7:截取出系统根目录的磁盘空间使用率
df -h | awk ‘{print $5}’|cut -f 1 -d “%>”
sed命令
sed可以将数据进行替换、删除、新增、选取特定行。
-n 只有经过sed处理的才显示(默认显示全部) -e 直接在命令行模式上进行sed的动作编辑 -f 将sed的动作写入一个文件,然后-f filename执行filename中的sed命令 -r 支持扩展型正则表达式语法(默认是基础正则表达式语法) -i 直接修改读取的文件内容,而不是默认的屏幕输出结果
例8:显示行号并打印出/etc/hosts,删除文件的前两行。
nl /etc/hosts | sed ‘1,2d’
例9:把/etc/hosts文件中的JY-DB全部替换为Alfred-DB显示出来
sed -e ‘s/JY-DB/Alfred-DB/g’ /etc/hosts
注:此处不写
例10:直接修改/etc/hosts文件,在文件的第2行下插入新的一行“192.168.1.100 JY-DB”
sed -i ‘2a 192.168.1.100 JY-DB’ /etc/hosts
3. 字符处理命令
sort命令
用途:对结果进行排序显示。
wc命令
用途:统计结果行,单词,字符的数量。
统计行
例11:统计oracle的用户进程数
ps -ef | grep LOCAL=NO | grep -v grep | wc -l
统计单词
例12:统计/etc/issue文件的单词数
wc -w /etc/issue
统计字符
例13:统计/etc/issue文件的字符数
wc -m /etc/issue
0 Comments