sed
sed:流式编辑器,在shell脚本中作为过滤器,即将前一个程序的输出作为sed的输入,经过一系列编辑命令转换为另一种格式输出。
sed的基本格式:
sed ‘pattern(正则表达式)/action(动作)’ file(文件名)
sed -f scriptfile(脚本文件) file
sed处理的文件既可以由标准输入重定向,也可以当命令行参数传入,一次传入多个文件,sed会依次处理。sed处理文件时,一次读取一行,保存在模式空间中,并对模式空间中的内容进行处理。处理完成后,经结果输出到屏幕。然后读取下一行,继续处理……
【注:】sed默认按照basic规范进行匹配。
- sed的action
(1)/pattern/p: 打印匹配pattern的行。
但是打印的内容包括文件的原来的内容和匹配了pattern的内容。
例:打印以1开头的行。
结果打印了文件file中的所有内容,并且将匹配的行打印了两次。
(2)/pattern/d:删除匹配的行,并将结果打印。
例:删除以1开头的行。
【注:】/pattern/d只是在输出时删除匹配的行并不是在文件中删除。
(3)/pattern/s/pattern1/pattern2/:查找匹配pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2。
例:将以1开头的行中的1替换为b
(4)/pattern/s/pattern1/pattern2/g:查找匹配pattern的行,将该行所有匹配pattern1的字符串替换为pattern2。
&:表示pattern2与前面pattern1的匹配条件相同。
\1:pattern2与pattern1的第一个括号匹配 的内容。
2. sed的选项
(1)-i:修改原文件
(2)-r:正则表达式使用extended规范
(3)-n:只打印选定的行
(4)-e:对模式空间的内容一次性匹配多个正则表达式或内容。
3. sed的定址,指定区域(行数)
定址的形式:数字/正则表达式/两者都有
数字:直接可以使用数字
正则表达式与数字:需要将正则表达式写入//中
4. 模式空间与保持空间
模式空间:sed在其中存储数据并且处理数据。
保护空间:在进行数据处理时,作为数据的暂存区域。
正常情况下,只是用模式空间,对数据进行加工与处理。保持空间只在显示某些命令时使用。
命令:
g:将数据从保持空间拷贝到模式空间,以覆盖的形式。
G:将数据从保持空间拷贝到模式空间,以追加的形式。
h:将数据从模式空间拷贝到保持空间,以覆盖的形式。
H:将数据从模式空间拷贝到保持空间,以追加的形式。
d:删除模式空间中的所有行,并读取新一行。
D:只删除模式空间中的第一行。
x:交换模式空间与保持空间中的内容。
n:以覆盖的形式读取下一行到模式空间。
N:以追加的形式读取下一行到模式空间。
例:1.用sed实现逆序打印file文件内容。
sed ‘1!G;h;$!d’ file
运行步骤:
2.注释与去注释
3.将换行转化成空格。
4.分别打印奇数行与偶数行。
awk
sed只能以行为单位处理数据,awk可以以列为单位处理数据。其中,每一行叫一条记录,每一列叫一个域。
域分隔符:默认,空格。
也可以被设定,awk -F ‘:’,表示设定以:为输入域分隔符。
awk FS=”:”,输入域分隔符。
awk OFS=”,” 输出域分隔符。
读取某一列数据,用$n表示, 0指所有数据, NF表示最后一列,$(NF-1)表示倒数第二列。记录分隔符:默认,\n。
awk的基本格式:
awk ‘pattern/{actions}’
awk ‘condition{actions}’
读取第二列数据:
awk也支持c语言的输出语句:
如果没有正则表达式,就匹配文件中的所有行。
awk的另一种格式:
由结果可以知道,该条语句是统计文件行数。
在读取第一行内容前,先执行BEGIN中的内容(只执行一次)。
在读完文件中内容后,再执行END中的内容。
其中,BEGIN和END不一定每次都存在。
awk也是一门弱类型,解释型语言,可以作为脚本来执行。
计算1-100的求和。
awk脚本的执行方式有两种:
1.awk -f test.awk file
虽然file文件与test.awk脚本没有关系,但不能少。
2.awk -f test.awk 运行后,再加Ctrl+d。
cut
cut的作用就是切割字符串。
cut -c 是按字符切割。
cut -b是按字节切割。
cut -d 可以指定域分隔符。
cut -f 指定区域。
sort
sort file:升序排列
sort -r file:降序排列
sort -u file:去掉重复行
sort -o file:将排序结果写入文件
sort -n file:让字符串按数值比较
sort -kn file:按第n列排序
uniq
uniq file:去掉相邻的重复行。
可以发现对于不相邻的重复行,uniq并不能去掉。
uniq -c file:统计重复行出现次数。
只能统计相邻的重复行出现次数。要统计文件中所有的出现次数,需要先sort排序。
uniq -u file:打印只出现一次的行。
uniq -d file:打印出现多次的行。