Linux三剑客命令详解(grepsedawk)
下⾯所说的是Linux中最重要的三个命令在业界被称为“三剑客”,它们是awk,sed,grep。
我们现在知道Linux下⼀切皆⽂件,对Linux的操作就是对⽂件的处理,那么怎么能更好的处理⽂件呢?这就要⽤到我们上⾯的三剑客命令。
在说这三个命令前我们要插⼊⼀个⼩插曲就是“正则表达式”。
⼀、正则表达式
所谓的正则表达式我个⼈理解就是正规的表⽰⽅法。他是⽤简单的⽅法来实现强⼤的功能,所以深受计算机爱好者的使⽤。
三剑客就是普通的命令,有的把他们叫做⼯具,在我看来都⼀样。⽽正则表达式就好⽐⼀个模版。三剑客能读懂这个模版。
现在他们的关系和功能都搞懂了,接下来我们就来认识下他们怎么结合的。正则表达式是⼀个模版,这个模版是由⼀些普通字符和⼀些元字符组成。普通字符包括⼤⼩写的字母和数字,⽽元字符则具有特殊的含义。具体如下
三剑客的功能⾮常强⼤,但我们只需要掌握他们分别擅长的领域即可:
grep擅长查功能,sed擅长取⾏和替换。awk擅长取列。
⼀,grep
Linux系统中grep命令是⼀种强⼤的⽂本搜索⼯具,它能使⽤正则表达式搜索⽂本,并把匹 配的⾏打印出来。grep全称是Global Regular Expression Print,表⽰全局正则表达式版本,它的使⽤权限是所有⽤户。
⽂本过滤(模式:pattern)⼯具,grep, egrep
grep [options]主要参数:
-a或–text 不要忽略⼆进制的数据。
-A<;显⽰列数>或–after-context=<;显⽰列数> 除了显⽰符合范本样式的那⼀列之外,并显⽰该列之后的内容。
-b或–byte-offset 在显⽰符合范本样式的那⼀列之前,标⽰出该列第⼀个字符的位编号。
-
B<;显⽰列数>或–before-context=<;显⽰列数> 除了显⽰符合范本样式的那⼀列之外,并显⽰该列之前的内容。
-c或–count 计算符合范本样式的列数。
-C<;显⽰列数>或–context=<;显⽰列数>或-<;显⽰列数> 除了显⽰符合范本样式的那⼀列之外,并显⽰该列之前后的内容。
-d<;进⾏动作>或–directories=<;进⾏动作> 当指定要查的是⽬录⽽⾮⽂件时,必须使⽤这项参数,否则grep指令将回报信息并停⽌动作。
-e<;范本样式>或–regexp=<;范本样式> 指定字符串做为查⽂件内容的范本样式。
-E或–extended-regexp 将范本样式为延伸的普通表⽰法来使⽤。
-f<;范本⽂件>或–file=<;范本⽂件> 指定范本⽂件,其内容含有⼀个或多个范本样式,让grep查符合范本条件的⽂件内容,格式为每列⼀个范本样式。
-F或–fixed-regexp 将范本样式视为固定字符串的列表。
-G或–basic-regexp 将范本样式视为普通的表⽰法来使⽤。
-h或–no-filename 在显⽰符合范本样式的那⼀列之前,不标⽰该列所属的⽂件名称。
-H或–with-filename 在显⽰符合范本样式的那⼀列之前,表⽰该列所属的⽂件名称。
-i或–ignore-case 忽略字符⼤⼩写的差别。
-l或–file-with-matches 列出⽂件内容符合指定的范本样式的⽂件名称。
-L或–files-without-match 列出⽂件内容不符合指定的范本样式的⽂件名称。
-n或–line-number 在显⽰符合范本样式的那⼀列之前,标⽰出该列的列数编号。
-q或–quiet或–silent 不显⽰任何信息。
-r或–recursive 此参数的效果和指定“-d recurse”参数相同。
-s或–no-messages 不显⽰错误信息。
-v或–revert-match 反转查。
-V或–version 显⽰版本信息。
-
w或–word-regexp 只显⽰全字符合的列。
-x或–line-regexp 只显⽰全列符合的列。
-y 此参数的效果和指定“-i”参数相同。
–help 在线帮助。
⼀,实例
1、查⽂件内容包含root的⾏数
2、查⽂件内容不包含root的⾏
3、查以s开头的⾏
4、查以n结尾的⾏
grep 与管道
grep 的输⼊不⼀定都是⽂件,它也常常从管道读取输⼊
[root@yum test]# ls
<
[root@yum test]# ls | grep “grep”
<
[root@yum test]# ls | grep “^gr”
linux vi命令详解菜鸟教学
说明:
ls 的命令的输出通过管道传给 grep。输出结果字母 gr 开头的所有⾏都被打印出来了,
也就是说,被选中的⽬录被打印出来了
注意:经过测试\d不能使⽤如果想使⽤数字⽤[0-9] 还有,要使⽤正则表达式的?+ {}记得前边加\
⼆,sed
sed 是⼀种新型的,⾮交互式的编辑器。它能执⾏与编辑器 vi 和 ex 相同的编辑任务。sed 编辑器没有提供交互式使⽤⽅式,使⽤者只能在命令⾏输⼊编辑命令、指定⽂件名,然后在屏幕上查看输出。sed 编辑器没有破坏性,它不会修改⽂件,除⾮使⽤ shell 重定向来保存输出结果。默认情况下,所有的输出⾏都被打印到屏幕上。
sed ⼯作过程
sed 编辑器逐⾏处理⽂件(或输⼊),并将输出结果发送到屏幕。sed 的命令就是在 vi和 ed/ex 编辑器中见到的那些。sed 把当前正在处理的⾏保存在⼀个临时缓存区中,这个缓存区称为模式空间或临时缓冲。sed 处理完模式空间中的⾏后(即在该⾏上执⾏ sed 命令后),就把该⾏发送到屏幕上(除⾮之前有命令删除这⼀⾏或取消打印操作)。sed 每处理完输⼊⽂件的最后⼀⾏后,sed 便结束运⾏。sed 把每⼀⾏都存在临时缓存区中,对这个副本进⾏编辑,所以不会修改或破坏源⽂件。如图 1:sed 处理过程。
从上图可以看出 sed 不是破坏性的,它不会修改正在编辑的⽂件。
sed 常⽤选项
-n 使⽤安静模式,在⼀般情况所有的 STDIN 都会输出到屏幕上,加⼊-n 后只打印被 sed 特殊处理的⾏
-e 多重编辑,且命令顺序会影响结果
-f 指定⼀个 sed 脚本⽂件到命令⾏执⾏,
-r Sed 使⽤扩展正则
-i 直接修改⽂档读取的内容,不在屏幕上输出
Sed操作命令
sed 操作命令告诉 sed 如何处理由地址指定的各输⼊⾏。如果没有指定地址,sed 就会处理输⼊的所有的⾏
x:指定⾏号。
x,y:指定从x到y的⾏号范围
/ pattern/:查询包含模式的⾏ # # % %
/ pattern/ pattern/:查询包含两个模式的⾏
/ pattern/,x:从与 pattern的匹配⾏到x号⾏之间的⾏
x,/ pattern/:从x号⾏到与 pattern的匹配⾏之间的⾏
x,y!:查询不包括x和y⾏号的⾏
r:从另⼀个⽂件中读⽂件
w:将⽂本写⼊到⼀个⽂件
y:变换字符
q:第⼀个模式匹配完成后退出
l:显⽰与⼋进制ASCⅡ码等价的控制字符
{}:在定位⾏执⾏的命令组
p:打印匹配⾏
=:打印⽂件⾏号。
a:在定位⾏号之后追加⽂本信息
i:在定位⾏号之前插⼊⽂本信息。
d:删除定位⾏
c:⽤新⽂本替换定位⽂本
s:使⽤替换模式替换相应模式
n:读取下⼀个输⼊⾏,⽤下⼀个命令处理新的⾏
N:将当前读⼊⾏的下⼀⾏读取到当前的模式空间。
h:将模式缓冲区的⽂本复制到保持缓冲区
H:将模式缓冲区的⽂本追加到保持缓冲区
x:互换模式缓冲区和保持缓冲区的内容
g:将保持缓冲区的内容复制到模式缓冲区
G:将保持缓冲区的内容追加到模式缓冲区。
举例⼦:
1、打印出⽂件第⼆⾏
2、打印出2-5⾏的内容
3、将⽂件中的root全部替换为abc
通常⽽⾔,sed将待处理的⾏读⼊模式空间,脚本中的命令逐⾏进⾏处理,直到脚本执
⾏完毕,然后该⾏被输出,模式空间清空,然后重复刚才的动作,⽂件中的新的⼀⾏被读⼊
直到⽂件处理完备
如果⽤户希望在某个条件下脚本中的某个命令被执⾏,或者希望模式空间得到保留以
便下⼀次的处理,都有可能使得sed在处理⽂件的时候不按照正常的流程来进⾏,这时可
以使⽤sed⾼级语法来满⾜⽤户需求。总的来说,sed⾼级命令可以分为以下3种功能
N、D、P:处理多⾏模式空间的问题
H、h、G、g、x:将模式空间的内容放⼊存储空间以便接下来的编辑
:、a:b、t在脚本中实现分⽀与条件结构
三,awk
awk 是⼀种很棒的语⾔,它适合⽂本处理和报表⽣成,其语法较为常见,借鉴了某些语⾔的⼀些精华,如 C 语⾔等。在 linux 系统⽇常处理⼯作中,发挥很重要的作⽤,掌握了 awk将会使你的⼯作变的⾼⼤上。awk 是三剑客的⽼⼤,利剑出鞘,必会不同凡响。
参数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论