一、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