Linux学习(六)-----正则表达式
2012-03-03 16:40
316 查看
书上说,正则表达式很重要,但是本人才开始学习,也不知道,到底有什么重要的作用。在这里记录只是为了以后方便查阅。这里介绍的是用于编写shell脚本的正则表达式。
首先,我们要先认识基础的正则表达式的重要的特殊字符的含义。如下表:
接下我们介绍几个工具程序,分别是grep,printf,sed,awk……
1、grep
用法:grep [参数] '搜索字符串' [filename]
参数:
-a 将二进制文件以文本文件的方式搜索数据
-c 计算找到‘搜索字符串’的次数
-i 忽略大小写的不同
-n 顺便输出行号
-v 选出不含‘搜索字符串’的行
举例:
[root@Ca03 ~]# last | grep -v 'root'
reboot system boot 2.6.18-164.11.1. Mon Feb 20 17:02 (9+04:16)
reboot system boot 2.6.18-164.11.1. Mon Feb 6 09:26 (23+11:53)
reboot system boot 2.6.18-164.11.1. Thu Jan 5 11:39 (14+05:07)
reboot system boot 2.6.18-164.11.1. Mon Dec 12 10:54 (3+22:10)
reboot system boot 2.6.27 Tue Dec 6 16:15 (5+18:35)
2、printf
用法: printf ‘打印格式’实际内容
参数:
\a 警告声音输出
\b 退格键
\f 清除屏幕
\n 输出新的一行
\r 即Enter键
\t 水平的tab键
\v 垂直的tab键
\xNN NN为两位数的数字,可以将数字转换为字符
%ns 即n个字符
%ni 即n个整数
%N.nf N位,小数点后有n位
举例:
[root@linux ~] # printf '\x45\n'
E
3、sed
用法:sed [参数] [动作]
参数:
-n 经过sed特殊处理的那一行会显示在屏幕上
-e 直接在命令行模式上进行sed的操作编辑
-f 直接将sed的操作写在一个文件内,-f filename ,则可执行filename的sed操作
-r 支持扩展正则表达式
[n1[,n2]] function
不一定存在,代表选择进行操作的行数。
function:
a 新增。a后面接的字符串会在当前的下一行出现
c 替换。c后面接的字符串可以替换n1,n2之间的行
d 删除。d后面通常不接内容
i 插入。i后面接的字符串会在当前的上一行出现
p 打印。
s 搜索。
举例:
nl /etc/passwd | sed '2,5d' 删除第2~5行。
nl /etc/passwd | sed '2a drink tea?' 在第二行之后加上“drink tea?”
nl /etc/passwd | sed -n '5,7p' 打印5~7行
4、awk
用法:awk '条件类型1{动作1}条件类型2{动作2}……' filename
注意:{动作}可以是几个动作,每个动作之间以;隔开或者以换行区分。
参数:
awk的内置变量:NF(每一行$0拥有的字段总数)
NR(当前awk所处理的是第几行数据)
FS(当前的分隔符)
条件用到的逻辑运算符 > < >= <= == !=
举例:
cat pay.txt | awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} NR>=2 {total = $2+$3+$4 ;printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'
首先,我们要先认识基础的正则表达式的重要的特殊字符的含义。如下表:
RE字符 | 含义 | 举例 |
^word | ^表示行首,待搜索的word字符串在行首 | grep -n '^#' test.c 搜索行首为#开始的那一行 |
word$ | $表示行尾,待搜索的字符串word在行尾 | grep -n '!$' test.c 搜索行尾为!的那一行 |
. | 代表一定存在一个的任意字符,即其位置一定仅有一个字符 | grep -n 'e.e' test.c 搜索的字符串{eve}{eae}{e e}等 |
\ | 转义符,将特殊符号的特殊意义去掉 | grep -n \' test.c 搜索含有单引号的那一行 |
* | *位置前面的一个字符重复零次或者零次以上 | grep -n ‘ess*’test.c 搜索含有{es}{ess}{esss}等字符串 |
\{n,m\} | 连续重复n到m个前一个字符 若为\{n\}则是连续重复n个前一个字符 若为\{n,\}则是连续重复n个以上的前一个字符 | grep -n ‘go\{2,3\}g’ test.c 在g和g之间有2~3个o存在的字符串,即{goog}{gooog} |
[ ] | []里放的字符表示存在其中任何一个即可 | 1、[list] grep -n ‘g[ld]’ test.c 搜索含有{gl}或{gd}的那一行 2、[ch1-ch2] grep -n '[0-9]' test.c 搜索含有任意数字的行 grep -n '[^0-9]' test.c 搜索不含数字的行 |
1、grep
用法:grep [参数] '搜索字符串' [filename]
参数:
-a 将二进制文件以文本文件的方式搜索数据
-c 计算找到‘搜索字符串’的次数
-i 忽略大小写的不同
-n 顺便输出行号
-v 选出不含‘搜索字符串’的行
举例:
[root@Ca03 ~]# last | grep -v 'root'
reboot system boot 2.6.18-164.11.1. Mon Feb 20 17:02 (9+04:16)
reboot system boot 2.6.18-164.11.1. Mon Feb 6 09:26 (23+11:53)
reboot system boot 2.6.18-164.11.1. Thu Jan 5 11:39 (14+05:07)
reboot system boot 2.6.18-164.11.1. Mon Dec 12 10:54 (3+22:10)
reboot system boot 2.6.27 Tue Dec 6 16:15 (5+18:35)
2、printf
用法: printf ‘打印格式’实际内容
参数:
\a 警告声音输出
\b 退格键
\f 清除屏幕
\n 输出新的一行
\r 即Enter键
\t 水平的tab键
\v 垂直的tab键
\xNN NN为两位数的数字,可以将数字转换为字符
%ns 即n个字符
%ni 即n个整数
%N.nf N位,小数点后有n位
举例:
[root@linux ~] # printf '\x45\n'
E
3、sed
用法:sed [参数] [动作]
参数:
-n 经过sed特殊处理的那一行会显示在屏幕上
-e 直接在命令行模式上进行sed的操作编辑
-f 直接将sed的操作写在一个文件内,-f filename ,则可执行filename的sed操作
-r 支持扩展正则表达式
[n1[,n2]] function
不一定存在,代表选择进行操作的行数。
function:
a 新增。a后面接的字符串会在当前的下一行出现
c 替换。c后面接的字符串可以替换n1,n2之间的行
d 删除。d后面通常不接内容
i 插入。i后面接的字符串会在当前的上一行出现
p 打印。
s 搜索。
举例:
nl /etc/passwd | sed '2,5d' 删除第2~5行。
nl /etc/passwd | sed '2a drink tea?' 在第二行之后加上“drink tea?”
nl /etc/passwd | sed -n '5,7p' 打印5~7行
4、awk
用法:awk '条件类型1{动作1}条件类型2{动作2}……' filename
注意:{动作}可以是几个动作,每个动作之间以;隔开或者以换行区分。
参数:
awk的内置变量:NF(每一行$0拥有的字段总数)
NR(当前awk所处理的是第几行数据)
FS(当前的分隔符)
条件用到的逻辑运算符 > < >= <= == !=
举例:
cat pay.txt | awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} NR>=2 {total = $2+$3+$4 ;printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'
相关文章推荐
- Linux运维学习历程-第七天-Linux文本工具及正则表达式
- Linux脚本学习_grep及正则表达式
- 【Linux学习笔记】37:基础正则表达式元字符
- Linux基础入门(六) --学习笔记-正则表达式
- linux正则表达式-学习总结
- Linux-正则表达式学习(精)
- [linux学习笔记]第3天:变量分类,重定向,管道命令,程序执行流,文本处理类命令, 正则表达式,短路操作符
- Linux学习之十grep及正则表达式(grep)
- Linux学习之——特殊字符和正则表达式
- Linux学习--第十一天--source、环境变量目录、欢迎信息、正则、cut、awk、sed、sort、判断表达式、if、for、case、一些脚本
- Linux学习第二十五篇--正则表达式和文件内容处理
- Linux学习-正则表达式
- 学习 Linux,101: 使用正则表达式搜索文本文件
- 【linux学习】Linux文本操作命令及正则表达式基础
- Linux学习之十一egrep及扩展正则表达式(egrep)
- Linux系统学习之正则表达式笔记
- Linux学习---shell编程(05-通配符,正则表达式)
- linux学习日记九 正则表达式介绍
- linux学习之正则表达式
- Linux学习笔记(正则表达式-1)