Linux下的sed、awk、cut、sort、uniq工具

来源:互联网 发布:java file类 api 编辑:程序博客网 时间:2024/05/16 00:26

sed

sed:流式编辑器,在shell脚本中作为过滤器,即将前一个程序的输出作为sed的输入,经过一系列编辑命令转换为另一种格式输出。
sed的基本格式:
sed ‘pattern(正则表达式)/action(动作)’ file(文件名)
sed -f scriptfile(脚本文件) file

sed处理的文件既可以由标准输入重定向,也可以当命令行参数传入,一次传入多个文件,sed会依次处理。sed处理文件时,一次读取一行,保存在模式空间中,并对模式空间中的内容进行处理。处理完成后,经结果输出到屏幕。然后读取下一行,继续处理……

【注:】sed默认按照basic规范进行匹配。

  1. 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表示,0NF表示最后一列,$(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:打印出现多次的行。
这里写图片描述

阅读全文
0 0