Linux命令进阶:grep,sed,awk全家桶(文本处理技术详例)
Posted 陆海潘江小C
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux命令进阶:grep,sed,awk全家桶(文本处理技术详例)相关的知识,希望对你有一定的参考价值。
目录
一、前言回顾
我之前写的一篇《Linux基本命令及编程环境实验 》,一度爆文,成为热门文章。众所周知,Linux是一类强大的操作系统,它的功能强大,稳定性高,在大公司企业应用广泛,掌握Linux的相关命令操作和知识体系显得十分重要。Linux博大精深,只学习到入门时候就感受到当初设计者的智慧,当然Linux系统也是大牛们智慧的结晶,不断优化迭代更新,衍生了许多版本类型。相对熟悉且使用普遍的发行版本就是Ubuntu。
这篇继续学习探索Linux,算是进阶一步,在前面的基础上,通过详细例子掌握更高级的命令,主要为文本处理技术,grep、sed、awk三个命令,感受神奇强大的Linux!
Linux系统学习相关文章:
二、grep
1、grep是什么?
UNIX grep家族由命令grep、egrep和fgrep组成。grep命令在文件中全局搜索正则表达式,并打印包含该表达式的所有行。egrep和fgrep命令是grep的变体。egrep命令是一个扩展的grep,支持更多的re元字符。fgrep命令称为固定grep。
grep命令格式:
grep [option] pattern filename
pattern为正则表达式,filename为目标操作文件名,option为可选择项,具体包括:
-i | 忽略字母的大小写 |
-n | 打印行号和匹配的行 |
-v | 打印不匹配的行 |
-c | 只打印匹配的行数 |
-w | 以字符串的形式搜索给定的模式 |
-l | 只打印具有匹配行的文件名称 |
2、grep用法详例解析
下面通过例子学习grep命令的使用,给定当前目录下的donors文本:
Mike Harrington:(510) 548-1278:250:100:175
Christian Dobbins:(408) 538-2358:155:90:201
Susan Dalsass:(206) 654-6279:250:60:50
Archie McNichol:(206) 548-1348:250:100:175
Jody Savage:(206) 548-1278:15:188:150
Guy Quigley:(916) 343-6410:250:100:175
Dan Savage:(406) 298-7744:450:300:275
Nancy McNeil:(206) 548-1278:250:80:75
John Goldenrod:(916) 348-4278:250:100:175
Chet Main:(510) 548-5258:50:95:135
Tom Savage:(408) 926-3456:250:168:200
Elizabeth Stachelin:(916) 440-1763:175:75:300
题目:
- Print all lines containing the string Tom.
- Print all lines where the person's first name starts with J.
- Print all lines ending in 175.
- Print all lines that don't contain 175.
- Print all lines where the phone number is in the 206 area code.
解答:
1. grep 'Tom' donors
2. grep '^J' donors
3. grep '175\\>' donors
4. grep -v '175' donors
5. grep '(206)' donors
结果:
三、sed
1、sed是什么?
sed命令是一种流线型的非交互编辑器(Stream editor)。sed程序不与编辑器交互工作,而是允许在命令行键入编辑命令,命名文件,然后在屏幕上查看编辑命令的输出。默认情况下,所有行都打印到屏幕上。sed编辑器是非破坏性的,可以使用shell重定向保存输出,否则它不会更改文件内容。
sed命令格式:
sed [option] '[address]command' filename
常用的option:-n,表示只打印出匹配到的行
command为/pattern/形式的正则表达式,这里sed命令与grep不同在于多了一个address选项,表示要对匹配的文本进行的操作,常用的有:
d | 删除行 |
s | 替换匹配的字符串 |
p | 打印行 |
a | 向当前行追加一行或多行文本 |
2、sed用法详例解析
题目:
- Change John's name to Joanthan
- Delete the first three lines
- Print lines 5 through 10
- Delete lines containing Mike
- Delete all blank lines
解答:
1.sed 's/John/Joanthan/' donors
2.sed '1,3d' donors
3.sed -n '5,10p' donors
4.sed '/Mike/d' donors
5.sed '/^[ \\t]*$/d' donors
结果:
四、awk
1、awk是什么?
Awk是一种UNIX/Linux编程语言,用于操作数据和生成报告。nawk是一个较新的版本,而nawk是Gnu版本。数据可以来自标准输入、一个或多个文件,也可以作为流程的输出。awk可以在命令行中用于简单的操作,也可以将其写入用于大型应用程序的程序中。因为awk可以操作数据,所以它是shell脚本和管理小型数据库中不可缺少的工具。
awk命令格式:
- awk 'pattern' filename
- awk 'action' filename
- awk 'pattern action' filename
同样类似上面的两种命令,awk功能更加强大,可以指定分隔符按字段取出字符串。
2、awk用法详例解析
题目:
- Print all the phone numbers
- Print Dan's phone number
- Print all last names beginning with D
- Print Main’s campaign contributions. Each value should be printed with a leading dollar sign; e.g., $250 $100 $175.
- Print the name and total contribution of each person.
解答:
1.awk -F: 'print $2' donors
2.awk -F: '/Dan/print $2' donors
3.awk -F'[ :]' '$2~/^D/print $2' donors
4.awk -F'[ :]' '$2~/Main/print "$"$5,"$"$6,"$"$7' donors
5.awk -F: 'print $1,$3+$4+$5' donors
结果:
- (406) 298-7744
-
Dobbins
Dalsass -
$50 $95 $135
-
五、总结
这篇继续学习探索Linux,进阶一步,通过详细例子掌握更高级的命令,主要为文本处理技术,grep、sed、awk三个命令,感受神奇强大的Linux。从详细例子学习中发现,掌握正则表达式也是很关键。众所周知,Linux是一类强大的操作系统,它的功能强大,稳定性高,在大公司企业应用广泛,掌握Linux的相关命令操作和知识体系显得十分重要。
如果觉得不错欢迎“一键三连”哦,点赞收藏关注,有问题直接评论,交流学习!
Linux系统学习相关文章:
我的CSDN博客:https://blog.csdn.net/Charzous/article/details/110507267
以上是关于Linux命令进阶:grep,sed,awk全家桶(文本处理技术详例)的主要内容,如果未能解决你的问题,请参考以下文章
Linux bash 文本处理命令awk,sed,grep 用法