第一节 sed与awk 正则表达式

一、sed与awk简介

sed是一个非交互式的面向字符流的编辑器

awk是一种负责模式匹配的程序设计语言,它的典型示例是将数据转换成格式化的报表

二、sed与awk的相同点和不同点

1.相同点

(1).它们使用相似的调用语法

(2).它们都是面向流的,一次一行的读取文本文件,并将结果标准输出

(3).它们都使用正则表达式进行模式匹配

(4).它们允许用户在脚本中指定命令

2.不同点

(1)sed处理非规范的文本   ----主要用于s替换

(2)awk 处理有行有列的规范文本

三、regexp 正则表达式(Regular  Expression)

1.什么是正则表达式

它是一种字符串的表达方式,一个正则表达式描述了一种模式(pattern)或字符序列

2.构成

(1)除元字符之外的任意字符都是表示它的字面意思的正则表达式

(2)元字符(基本basic元字符   、   扩展extended元字符

3.基本元字符

(1).  匹配除换行符之外(\n)的任意单个字符,awk中可以匹配换行符

要匹配包含文件名的字符串,而句点 (.) 是输入字符串的组成部分,请在正则表达式中的句点前面加反斜杠 \转义字符/filename\.ext/---匹配filename.ext

(2)   匹配任意一个(包括零个)在它前面的单个字符

不要与g全局配合使用

(3)[ ...] 匹配方括号中的任意一个单字符

^为否定匹配  --->[ ^12]  匹配除1和2 之外的任意一个单字符

-放在两个数字或者字母之间表示字符的范围 ---->[1-5]  匹配1、2、3、4、5中的任意一个字符

(4)^作为正则表达式的第一个字符,匹配行的开始

(5)$作为正则表达式的最后一个字符,匹配行的结尾

匹配空行 :  ^$

  (6) \{n,m\}   匹配前置字符出现n和m之间的任意次数

\{n\}匹配出现n次

\{n,\}匹配至少出现n次

  (7)  \ 转义字符  ---->把有意义的变得没意义 把没意义的变的有意义

  (8) \<   词首定位符      /\<bin/     匹配以bin开头的单词    

       \> 词尾定位符         /fix\>/       匹配以fix结尾的单词

[root@wing ~]# echo wingabc wing | sed 's/\<wing/S/g'      ------->只替换wing这个开头
Sabc S
[root@wing ~]# echo wingabc wing | sed 's/\<wing\>/S/g'      ---->主要用于匹配它自己
wingabc S

(9)

'  ' 单引号      ( 强引 硬引)

"  " 双引号    ( 弱引 软引)

[root@server sed]# a=8
[root@server sed]# echo $a
8
[root@server sed]# echo "$a"
8
[root@server sed]# echo '$a'

$a

用单引号,强引让$符失去功能

4.扩展元字符  (用扩展元字符时需要加选项 -r )

(1) +  匹配前面的单个正则表达式的一次出现或多次出现

(2) 匹配前面的单个正则表达式的零次出现或一次出现

(3)|  可以匹配前面的或后面的正则表达式(或)

(4)()对正则表达式进行分组

(5){n,m} 匹配出现n到m次数

         {n} 匹配出现n次

         {n,}  匹配至少出现n次

格式:# sed  -r    's/o{n,m}/A / '    1.txt 

5.POSIX 字符i类

1.    [[:punct:]]    标点符号

用法:     sed   's/[[:punct:]]/A/g'   haha.txt   ----->把haha.txt中的标点全部换成A

2.     [[:blank:]]     空格与制表符

例题:用制表符替换文件中出现的所有空格。
# sed 's/[[:blank:]]/A/g' sed.txt

猜你喜欢

转载自blog.csdn.net/bijingzhao123/article/details/80094014
今日推荐