了解awk、sed、grep

阅读这篇文章,你将会了解:
1.awk、sed、grep的区别;
2.他们分别有什么命令可以使用,用到的时候可以查阅;

一. awk、sed、grep的区别

概念模版
SED在线编辑器,一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。文件内容不发生改变,除非使用-i命令声明。sed [-option] ‘command’ file
AWK相对于sed 常常作用于一整个行的处理,awk倾向于将每行分成数个“字段”来处理,可以理解为处理列。awk [-F|-f|-v] ‘BEGIN{} /command/ {command1; command2} END{}’ file
GREP文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来grep [command] file

有以下的文本:test.txt,把有name的行找出来

my cat's name is betty
this is your dog
my dog's name is frank
this is your fish
my fish's name is george
this is your goat
my goat's name is adam
概念解释
SEDsed -n ‘/ name /p’ test.txt-n:仅显示script处理后的结果,p:表示打印行
AWKawk -F’ ’ ‘{if($3==“name”){print $0}}’ test.txt-F:每行根据后面的字符切割,$3:第三列,$0:当前行
GREPgrep ’ name ’ test.txt

二. awk

模式:
awk [-F|-f|-v] ‘BEGIN{} /command{command1; command2} END{}’ file

标准模式下的含义:

描述
[-F|-f|-v]大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
’ ’引用代码块
BEGIN初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
/command/匹配代码块,可以是字符串或正则表达式
{}命令代码块,包含一条或多条命令
;多条命令使用分号分隔
END结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

特殊的属性:

描述
$0表示整个当前行
$1每行第一个字段
NF字段数量变量
NR每行的记录号,多文件记录递增
FNR与NR类似,不过多文件记录不递增,每个文件都从1开始
\t制表符
\n换行符
FSBEGIN时定义分隔符
RS输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~匹配,与==相比不是精确比较
!~不匹配,不精确比较
==等于,必须全部相等,精确比较
!=不等于,精确比较
&&逻辑与
||逻辑或
+匹配时表示1个或1个以上
/[0-9][0-9]+/两个或两个以上数字
/[0-9][0-9]*/一个或一个以上数字
FILENAME文件名
OFS输出字段分隔符, 默认也是空格,可以改为制表符等
ORS输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F’[:#/]’定义三个分隔符

三. sed

https://linux.cn/article-10232-1.html
模式:
sed [options] ‘command’ file(s)
sed [options] -f scriptfile file(s)

options:

参数完整参数说明
-e script–expression=script 以选项中的指定的script来处理输入的文本文件
-E默认情况下,Sed 的正则表达式引擎仅理解 POSIX 基本正则表达式 的语法。如果你需要用到扩展正则表达式,你必须在 Sed 命令上添加 -E 标志
-f script–files=script 以选项中的指定的script文件来处理输入的文本文件
-h–help显示帮助
-n–quiet --silent仅显示script处理后的结果
-V–version显示版本信息

sed命令:

命令说明
d删除,删除选择的行
D删除模板块的第一行
s替换指定字符
h拷贝模板块的内容到内存中的缓冲区
H追加模板块的内容到内存中的缓冲区
g获得内存缓冲区的内容,并替代当前模板块中文本
G获得内存缓冲区的内容,并追加到当前模板块文本的后面
l列表不能打印字符的清单
n读取下一个输入行,用下一个命令处理新的行而不是第一个命令
N追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码
p打印模板块的行
P打印模板块的第一行
q退出sed
blabel 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾
rfile 从file中读行
tlabel if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
Tlabel 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
wfile 写并追加模板块到file末尾
Wfile 写并追加模板块的第一行到file末尾
!表示后面的命令对所有没有被选定的行发生作用
=打印当前行号
#把注释扩展到第一个换行符以前

四. grep

模式:
grep [options] [command] file

options:

描述
-a将 binary 文件以 text 文件的方式搜寻数据
-c计算找到 ‘搜寻字符串’ 的次数
-i忽略大小写的不同,所以大小写视为相同
-n顺便输出行号
-v反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行!
-s不显示错误信息
-w只显示全符合的列
-o只输出匹配到的部分

五. 参考文档

sed: https://www.cnblogs.com/maxincai/p/5146338.html
awk: https://www.cnblogs.com/xudong-bupt/p/3721210.html
https://blog.csdn.net/wangyeshun/article/details/82562688

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值