一、Sed介绍
Sed是流编辑器,用来处理文件的。Sed是一行一行读取文件内容(先将其保存在一个临时缓冲区中)并按照要求进行处理,把处理后的结果输出到屏幕。用来自动编辑一个或者多个文件,简化文件的反复操作,并可以进行相应的转换和过滤等。
教程:http://c.biancheng.net/view/4028.html
二、Sed使用方法
语法: sed [option] ‘处理动作’ 文件名
常用选项:
- -e:进行多项编辑
- -n:取消默认输出,如果不取消每一行都会输出
- -r:使用扩展正则表达式
- -i:原地编辑(修改源文件)
- -f:指定sed脚本的文件名
常见处理动作(定位+动作):
- ‘p’:打印
- ‘i’:在指定行之前插入内容
- ‘a’:在指定行之后插入内容
- ‘c’:替换指定行所有内容
- ‘d’:删除指定行
- ‘s’:搜索
- ‘r’:从另外文件中读取内容
- ‘w’:内容另存为
三、sed使用Demo
1、打印sed '' a.txt #对文件什么都不做sed -n 'p' a.txt #打印每一行,并取消默认输出sed -n '1p' a.txt #打印第一行sed -n '1,5p' a.txt #打印第一到第五行sed -n '$p' a.txt #打印最后一行sed -n '2p;3p' a.txt #同时打印第二,第三行2、编辑sed -n '2ihello' a.txt #在第二行前面添加字符hello(hello是插入在第一行和第二行之间)sed -n '3ahello' a.txt #在第三行之后添加字符hello(hello是插入在第三行和第四行之间)3、替换sed '$chello' a.txt #替换最后一行的内容为hello,原来的内容被替换了sed -n '/^adm/croot' a.txt #把每一行以adm开头的整行内容替换成rootsed '1,5chello' a.txt #把1到5行的内容(当作一行)全部变成hello4、删除sed '4d' a.txt #删除第四行的数据sed '1,4d' a.txt #删除第一到第四行的数据sed -n '/^adm/d' a.txt #删除以adm开头的数据5、对文件进行搜索替换操作sed 选项 's/搜索的内容/替换的内容/动作' 处理的文件名其中:s表示search搜索,/表示分隔符,动作一般是打印p和全局替换gsed -n 's/root/ROOT/p' a.txt #替换每一行第一个匹配到的root为ROOT,并打印sed -n 's/c/hi/gp' a.txt #替换每一行第所有匹配到的root为ROOTsed -n 's/c/hi/2p' a.txt #替换每一行第第二个匹配到的root为ROOTsed -n 's/^#//gp' a.txt #替换每一行的首个#符合为空sed -n '1,5s/^/#/gp' a.txt #给第一到第五行的行首新增#符号6、读写sed '3r /etc/hosts' b.txt #从b.txt中读取文件内容,再加上/etc/hosts 的内容合并在一起sed.exe '1,2w c.txt' b.txt #从b.txt读取1,2行的数据写入到c.txt中
四、awk介绍
awk是一种编程语言,用于对文本和数据的处理。
awk是逐行扫描文件的,默认从第一行到最后一行,寻找特定模式的行,并进行操作。
支持条件判断,支持for、while循环。
五、awk使用方式
语法:awk [选项] ‘命令部分’ 文件名
注意:引用shell变量需要使用双引号括起来
常用选项:
- -F:定义字段分割符号,默认是空格
- -v:定义变量并复制
命令部分说明:
- 正则表达式,地址定位
- ‘/root/{awk 语句}’ 相当于sed中的:’/root/p’
- ‘NR==1,NR==5{awk 语句}’ 相当于sed中的:’1,5p’
- ‘/^root/,/^ftp/{awk 语句}’ 相当于sed中的:’/^root/,/^ftp/p’
- {awk 语句1;awk 语句2;….}
- ‘{print $0,print $1}’ 相当于sed中的:’p’
- ‘NR==5{print $0}’ 相当于sed中的:’5p’
- 注意:awk语句中间使用分号间隔
- BEGIN…END…
- ‘BEGIN{awk 语句}’;{处理中};END{awk 语句}’
- ‘BEGIN{awk 语句}’;{处理中}’
- ‘{处理中};END{awk 语句}’
脚本模式:
#!/bin/awk -f#一下是awk引号里的命令清单,不要用引号保护命令,多个命令之间使用分号间隔BEGIN{FS=":"}NR=1 NR=3{print $1"\t"$NF}...##执行,方法1:awk 选项 -f awk.sh的脚本文件 要处理的文件##执行,方法2:./awk.sh fileName
awk内部变量:
- $0:当前处理行的所有记录
- $1,$2…$n:文件中每行以间隔符分割的不同字段值
- NF:当前记录的字段数(列数)
- $NF:最后一列,$(NF-1)表示倒数第二列
- FNR/NR:行号
- FS:定义间隔符,如’BEGIN{FS=”:”};{print $1,$3}’
- OFS:定义输出字段分隔符,默认空格,如’BEGIN{OFS=”\t”};{print $1,$3}’
- RS:输入记录分隔符,默认换行
- ORS:输出记录分隔符,默认换行符
六、awk使用demo
1、打印a.txt所有内容,按照空格分割:awk -F ' ' '{print $0}' a.txt2、打印第三行:awk -F ' ' 'NR==3{print $0}' a.txt3、打印从第三行开始的连续两行:awk -F ' ' 'NR==3,NR==2{print $0}' a.txt4、搜索打印以c开头的行:awk '/^c/{print $0}' a.txt5、定义输出分隔符:awk -F ' ' 'BEGIN{OFS=","};{print $1,$NF}' a.txt或者使用双引号连接输出内容:awk -F ' ' '{print $1","$NF}' a.txt
