一,文本的操作
sed是一个“非交互式的”面向字符流的编辑器,linuxjishu/13830.html target=_blank class=infotextkey>awk是一种负责模式匹配的程序设计语言,
它的典型示例是将数据转换成格式化的报表。
二,sed awk命令的基本操作
例一:file1.txt
用Massachusetts替换MA
使用多重指令
脚本:sedsrc
使用awk
常见出错信息
没有大括号{}将过程括起来
没用单引号’’将指令括起来
没有使用斜杠//slashes 将正则表达式括起来
OptionDescription
-f Filename of script follows.
-F Change field separator.
-vvar=value follows.
三,正则表达式 语法 Regular Expression
表达式(模式匹配)
算术表达式:
1+23*5 1+2*3 (1+2)*3
特定的模式:
ABCADC AEC … …
ababb abbb abbbb abbbb… …
一个正则表达式描述了一种模式或字符序列
正则表达式的匹配过程
元字符
. 匹配除换行符之外的任意单个字符,awk中可以匹配换行符
* 匹配任意一个(包括零个)在它前面的字符
[...]匹配方括号中的任意一个字符,^为否定匹配, -表示字符的范围
^ 作为正则表达式的第一个字符,匹配行的开始。在awk中可以嵌入换行符
$ 作为正则表达式的最后一个字符,匹配行的结尾。在awk中可以嵌入换行符
{n,m} 匹配n和m之间的任意次数, {n}匹配出现n次。{n,}匹配至少出
现n次
转义字符
扩展元字符
ExtendedMetacharacters (egrep and awk)
+ 匹配前面的正则表达式的一次出现或多次出现
? 匹配前面的正则表达式的零次出现或一次出现
| 可以匹配前面的或后面的正则表达式(替代方案)
() 对正则表达式分组
{n,m} 匹配出现的n到m次数, {n}匹配出现n次。{n,}匹配至少出现n次,大多数awk都不支持,用于POSIX egrep和POSIX awk
编写正则表达式的3 个步骤:
1 知道要匹配的内容以及它如何出现在文本中。
2 编写一个模式来描述要匹配的内容
3 测试模式来查看它匹配的内容
模式匹配产生的结果:
Hits(命中)
这是我想匹配的行
Misses(未命中)
这是我不想匹配的行
Omissions(遗漏)
这是我不能匹配但想要匹配的行
Falsealarms(假警报)
这是我不想匹配的但却匹配了的行
字符类
字符的范围
排除字符类
重复出现的字符
10
50
100
500
1000
5000
[15]0*
[15]00*
分组操作
compan(y|ies)
注意:大多数sed 和grep 不能对圆括号()进行匹配,但是在egrep 和
awk 所有版本都是可以的
四,编写sed 脚本
模式空间:
寻址上的全局透视(定址)
sed将命令应用于每个输入行,它可以指定零个、一个或两个地址。每个地址
都是一个描述模式、行号或者行寻址符号的正则表达式。
例file2.txt
.TS
Beijing,CN
.TE
Shanghai,CN
guangzhou,CN
shenyang,CN
$ sed'/Beijing/s/CN/China/' file2.txt
分组命令
五,基本的sed 命令
sed 命令的语法
[address]command
行地址对于任何命令都是可选的,它可以是一个模式,或者由斜杠、行号或行寻址符号括住的正则表达式, 大多数sed命令能接受由逗号分隔的两个地址, 有些命令只接受单个行地址
命令还可以用大括号进行分组,第一个命令可以和大括号放在同一行,但是右大括号必须自己一行。
替换
[address ]s/pattern /replacement/flags
标志flags是:
n 可以是1-512,表示第n次出现的情况进行替换
g 全局更改
p 打印模式空间的内容
wfile 写入到一个文件file中
replacement部分用下列字符会有特殊含义:
&用正则表达式匹配的内容进行替换
n 回调参数
删除
[address]d
删除模式空间的内容,同时改变脚本的控制流,执行这个命令后,在“空的”模式空间不再有命令执行。删除命令会导致读取新的输入行。