您的位置:首页 > 运维架构 > Linux

Linux学习(六)-----正则表达式

2012-03-03 16:40 316 查看
书上说,正则表达式很重要,但是本人才开始学习,也不知道,到底有什么重要的作用。在这里记录只是为了以后方便查阅。这里介绍的是用于编写shell脚本的正则表达式。
首先,我们要先认识基础的正则表达式的重要的特殊字符的含义。如下表:

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

搜索不含数字的行

接下我们介绍几个工具程序,分别是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}'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: